Generated by Cython 0.24
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: fast_recursive_ranker.c
001: #-*- coding: ISO-8859-1 -*-
002: # cython: boundscheck = False
003: # cython: profile = False
004:
005: # http://docs.cython.org/src/reference/compilation.html#compiler-directives
006:
007: # cython - libc
008: from libc.math cimport log, exp
009:
010: # python standard libs
+011: from collections import defaultdict
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_defaultdict); __Pyx_GIVEREF(__pyx_n_s_defaultdict); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_defaultdict); __pyx_t_2 = __Pyx_Import(__pyx_n_s_collections, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 11, __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_defaultdict); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_defaultdict, __pyx_t_1) < 0) __PYX_ERR(0, 11, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+012: from heapq import heappush, heappushpop
__pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_heappush); __Pyx_GIVEREF(__pyx_n_s_heappush); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_heappush); __Pyx_INCREF(__pyx_n_s_heappushpop); __Pyx_GIVEREF(__pyx_n_s_heappushpop); PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_heappushpop); __pyx_t_1 = __Pyx_Import(__pyx_n_s_heapq, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_heappush); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_heappush, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_heappushpop); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_heappushpop, __pyx_t_2) < 0) __PYX_ERR(0, 12, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+013: from cherrypy import thread_data
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_thread_data); __Pyx_GIVEREF(__pyx_n_s_thread_data); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_thread_data); __pyx_t_2 = __Pyx_Import(__pyx_n_s_cherrypy, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 13, __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_thread_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 13, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_thread_data, __pyx_t_1) < 0) __PYX_ERR(0, 13, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
014:
015: # keyword search
+016: from DAS.keywordsearch.config import get_setting, DEBUG, K_RESULTS_TO_STORE, \
__pyx_t_2 = PyList_New(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_get_setting); __Pyx_GIVEREF(__pyx_n_s_get_setting); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_setting); __Pyx_INCREF(__pyx_n_s_DEBUG); __Pyx_GIVEREF(__pyx_n_s_DEBUG); PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_DEBUG); __Pyx_INCREF(__pyx_n_s_K_RESULTS_TO_STORE); __Pyx_GIVEREF(__pyx_n_s_K_RESULTS_TO_STORE); PyList_SET_ITEM(__pyx_t_2, 2, __pyx_n_s_K_RESULTS_TO_STORE); __Pyx_INCREF(__pyx_n_s_P_NOT_SPECIFIED_RES_TYPE); __Pyx_GIVEREF(__pyx_n_s_P_NOT_SPECIFIED_RES_TYPE); PyList_SET_ITEM(__pyx_t_2, 3, __pyx_n_s_P_NOT_SPECIFIED_RES_TYPE); __Pyx_INCREF(__pyx_n_s_P_NOT_TAKEN); __Pyx_GIVEREF(__pyx_n_s_P_NOT_TAKEN); PyList_SET_ITEM(__pyx_t_2, 4, __pyx_n_s_P_NOT_TAKEN); __Pyx_INCREF(__pyx_n_s_P_NOT_TAKEN_STOPWORD); __Pyx_GIVEREF(__pyx_n_s_P_NOT_TAKEN_STOPWORD); PyList_SET_ITEM(__pyx_t_2, 5, __pyx_n_s_P_NOT_TAKEN_STOPWORD); __pyx_t_1 = __Pyx_Import(__pyx_n_s_DAS_keywordsearch_config, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_get_setting); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_setting, __pyx_t_2) < 0) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_DEBUG); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_DEBUG, __pyx_t_2) < 0) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_K_RESULTS_TO_STORE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_K_RESULTS_TO_STORE, __pyx_t_2) < 0) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_P_NOT_SPECIFIED_RES_TYPE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_P_NOT_SPECIFIED_RES_TYPE, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_P_NOT_TAKEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_P_NOT_TAKEN, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_P_NOT_TAKEN_STOPWORD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 16, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_P_NOT_TAKEN_STOPWORD, __pyx_t_2) < 0) __PYX_ERR(0, 17, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
017: P_NOT_SPECIFIED_RES_TYPE, P_NOT_TAKEN, P_NOT_TAKEN_STOPWORD
+018: from DAS.keywordsearch.metadata import das_ql
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_das_ql); __Pyx_GIVEREF(__pyx_n_s_das_ql); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_das_ql); __pyx_t_2 = __Pyx_Import(__pyx_n_s_DAS_keywordsearch_metadata, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 18, __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_das_ql); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 18, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_das_ql, __pyx_t_1) < 0) __PYX_ERR(0, 18, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+019: from DAS.keywordsearch.nlp import getstem, filter_stopwords
__pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_getstem); __Pyx_GIVEREF(__pyx_n_s_getstem); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_getstem); __Pyx_INCREF(__pyx_n_s_filter_stopwords); __Pyx_GIVEREF(__pyx_n_s_filter_stopwords); PyList_SET_ITEM(__pyx_t_2, 1, __pyx_n_s_filter_stopwords); __pyx_t_1 = __Pyx_Import(__pyx_n_s_DAS_keywordsearch_nlp, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_getstem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_getstem, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_filter_stopwords); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_filter_stopwords, __pyx_t_2) < 0) __PYX_ERR(0, 19, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+020: from DAS.keywordsearch.tokenizer import get_keyword_without_operator
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_get_keyword_without_operator); __Pyx_GIVEREF(__pyx_n_s_get_keyword_without_operator); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_get_keyword_without_operator); __pyx_t_2 = __Pyx_Import(__pyx_n_s_DAS_keywordsearch_tokenizer, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 20, __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_get_keyword_without_operator); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 20, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_keyword_without_operator, __pyx_t_1) < 0) __PYX_ERR(0, 20, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+021: from DAS.keywordsearch.tokenizer import get_operator_and_param
__pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_get_operator_and_param); __Pyx_GIVEREF(__pyx_n_s_get_operator_and_param); PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_get_operator_and_param); __pyx_t_1 = __Pyx_Import(__pyx_n_s_DAS_keywordsearch_tokenizer, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 21, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_get_operator_and_param); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 21, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_operator_and_param, __pyx_t_2) < 0) __PYX_ERR(0, 21, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+022: from DAS.keywordsearch.rankers.exceptions import TimeLimitExceeded
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_TimeLimitExceeded); __Pyx_GIVEREF(__pyx_n_s_TimeLimitExceeded); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_TimeLimitExceeded); __pyx_t_2 = __Pyx_Import(__pyx_n_s_DAS_keywordsearch_rankers_except, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 22, __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_TimeLimitExceeded); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 22, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_d, __pyx_n_s_TimeLimitExceeded, __pyx_t_1) < 0) __PYX_ERR(0, 22, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
023:
024: # Heuristics
025: # /DoubleMu/Run2012A-Zmmg-13Jul2012-v1xx/RAW-RECO --> dataset
+026: cdef double p_value_as_lookup = 0.80
__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_p_value_as_lookup = 0.80;
+027: cdef bint TRACE = DEBUG
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 27, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_TRACE = __pyx_t_3;
028:
029:
030: # TOOD: this is mainly for backward compatibility
+031: cdef inline double logprob(double score):
static CYTHON_INLINE double __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_logprob(double __pyx_v_score) {
double __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("logprob", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+032: return log(score) if (score > 0.0) else score
if (((__pyx_v_score > 0.0) != 0)) {
__pyx_t_1 = log(__pyx_v_score);
} else {
__pyx_t_1 = __pyx_v_score;
}
__pyx_r = __pyx_t_1;
goto __pyx_L0;
033:
034:
035: # TODO: disabling debug ("trace" variable) would further improve performance
036:
037:
+038: def cleanup_values_weights(values_ws):
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_1cleanup_values_weights(PyObject *__pyx_self, PyObject *__pyx_v_values_ws); /*proto*/
static char __pyx_doc_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_cleanup_values_weights[] = "\n\n ";
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_1cleanup_values_weights = {"cleanup_values_weights", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_1cleanup_values_weights, METH_O, __pyx_doc_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_cleanup_values_weights};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_1cleanup_values_weights(PyObject *__pyx_self, PyObject *__pyx_v_values_ws) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("cleanup_values_weights (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_cleanup_values_weights(__pyx_self, ((PyObject *)__pyx_v_values_ws));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_cleanup_values_weights(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_values_ws) {
PyObject *__pyx_v_values_ws_ = NULL;
PyObject *__pyx_v_kw = NULL;
PyObject *__pyx_v_maps = NULL;
PyObject *__pyx_v_score = NULL;
PyObject *__pyx_v_m = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("cleanup_values_weights", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.cleanup_values_weights", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_values_ws_);
__Pyx_XDECREF(__pyx_v_kw);
__Pyx_XDECREF(__pyx_v_maps);
__Pyx_XDECREF(__pyx_v_score);
__Pyx_XDECREF(__pyx_v_m);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__11 = PyTuple_Pack(6, __pyx_n_s_values_ws, __pyx_n_s_values_ws_2, __pyx_n_s_kw, __pyx_n_s_maps, __pyx_n_s_score, __pyx_n_s_m); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 38, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__11);
__Pyx_GIVEREF(__pyx_tuple__11);
/* … */
__pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_1cleanup_values_weights, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_cleanup_values_weights, __pyx_t_2) < 0) __PYX_ERR(0, 38, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_codeobj__12 = (PyObject*)__Pyx_PyCode_New(1, 0, 6, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__11, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_vk_CMS_DMWM_GIT_DAS_src_p, __pyx_n_s_cleanup_values_weights, 38, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__12)) __PYX_ERR(0, 38, __pyx_L1_error)
039: """
040:
041: """
042: # TODO: move this to matchers to simplify code
043: # cleanup values weights
+044: values_ws_ = defaultdict(list)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_defaultdict); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } if (!__pyx_t_3) { __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, ((PyObject *)(&PyList_Type))); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } else { __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL; __Pyx_INCREF(((PyObject *)(&PyList_Type))); __Pyx_GIVEREF(((PyObject *)(&PyList_Type))); PyTuple_SET_ITEM(__pyx_t_4, 0+1, ((PyObject *)(&PyList_Type))); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 44, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_values_ws_ = __pyx_t_1; __pyx_t_1 = 0;
+045: for kw, maps in values_ws.items():
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_values_ws, __pyx_n_s_items); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } if (__pyx_t_4) { __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_5 = 0; __pyx_t_6 = NULL; } else { __pyx_t_5 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 45, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_6)) { if (likely(PyList_CheckExact(__pyx_t_2))) { if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 45, __pyx_L1_error) #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 45, __pyx_L1_error) #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 45, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } } else { __pyx_t_1 = __pyx_t_6(__pyx_t_2); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 45, __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_CPYTHON 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, 45, __pyx_L1_error) } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_3 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_3); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 45, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_7 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 45, __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_4 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_3 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 45, __pyx_L1_error) __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_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, 45, __pyx_L1_error) __pyx_L6_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_kw, __pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_maps, __pyx_t_3); __pyx_t_3 = 0; /* … */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+046: for score, m in maps:
if (likely(PyList_CheckExact(__pyx_v_maps)) || PyTuple_CheckExact(__pyx_v_maps)) { __pyx_t_1 = __pyx_v_maps; __Pyx_INCREF(__pyx_t_1); __pyx_t_9 = 0; __pyx_t_10 = NULL; } else { __pyx_t_9 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_maps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_10 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 46, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_10)) { if (likely(PyList_CheckExact(__pyx_t_1))) { if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 46, __pyx_L1_error) #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif } else { if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_1)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(0, 46, __pyx_L1_error) #else __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif } } else { __pyx_t_3 = __pyx_t_10(__pyx_t_1); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 46, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_3); } if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) { PyObject* sequence = __pyx_t_3; #if CYTHON_COMPILING_IN_CPYTHON 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, 46, __pyx_L1_error) } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_4 = PyList_GET_ITEM(sequence, 0); __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { Py_ssize_t index = -1; __pyx_t_11 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 46, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_8 = Py_TYPE(__pyx_t_11)->tp_iternext; index = 0; __pyx_t_4 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_4)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_4); index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_7)) goto __pyx_L9_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_11), 2) < 0) __PYX_ERR(0, 46, __pyx_L1_error) __pyx_t_8 = NULL; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; goto __pyx_L10_unpacking_done; __pyx_L9_unpacking_failed:; __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_8 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 46, __pyx_L1_error) __pyx_L10_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_4); __pyx_t_4 = 0; __Pyx_XDECREF_SET(__pyx_v_m, __pyx_t_7); __pyx_t_7 = 0; /* … */ } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+047: if not isinstance(m, dict):
__pyx_t_12 = PyDict_Check(__pyx_v_m);
__pyx_t_13 = ((!(__pyx_t_12 != 0)) != 0);
if (__pyx_t_13) {
/* … */
}
048: m = {
+049: 'map_to': m,
__pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 49, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_iso88591_map_to, __pyx_v_m) < 0) __PYX_ERR(0, 49, __pyx_L1_error) __Pyx_DECREF_SET(__pyx_v_m, __pyx_t_3); __pyx_t_3 = 0;
050: # 'adjusted_keyword' # TODO: shall be renamed into _value
051: }
+052: values_ws_[kw].append((score, m))
__pyx_t_3 = PyObject_GetItem(__pyx_v_values_ws_, __pyx_v_kw); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_score); __Pyx_GIVEREF(__pyx_v_score); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_score); __Pyx_INCREF(__pyx_v_m); __Pyx_GIVEREF(__pyx_v_m); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_m); __pyx_t_14 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_t_7); if (unlikely(__pyx_t_14 == -1)) __PYX_ERR(0, 52, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+053: return values_ws_
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_v_values_ws_); __pyx_r = __pyx_v_values_ws_; goto __pyx_L0;
054:
055:
+056: cdef class QueryContext:
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext {
PyObject_HEAD
PyObject *schema_ws;
PyObject *values_ws;
PyObject *chunks;
PyObject *kw_list;
int n_kw;
int n_kw_uniq_no_stopw;
clock_t time_limit;
int time_limit_exceeded;
};
057: #char*
058: # TODO: context in cpython
059: #cdef cmap[string, vector[pair[double, string]]] schema_ws
060: cdef dict schema_ws, values_ws, chunks
061: cdef list kw_list
062: cdef int n_kw
063: cdef int n_kw_uniq_no_stopw
064: cdef clock_t time_limit
065: cdef bint time_limit_exceeded
066: #cdef int N_kw_non_stopword
067: # TODO: cdef list[bint] is_stopword
068:
069:
+070: def __cinit__(self, schema_ws, values_ws, kw_list, chunks, time_limit):
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_12QueryContext_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_12QueryContext_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_schema_ws = 0;
PyObject *__pyx_v_values_ws = 0;
PyObject *__pyx_v_kw_list = 0;
PyObject *__pyx_v_chunks = 0;
PyObject *__pyx_v_time_limit = 0;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema_ws,&__pyx_n_s_values_ws,&__pyx_n_s_kw_list,&__pyx_n_s_chunks,&__pyx_n_s_time_limit,0};
PyObject* values[5] = {0,0,0,0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
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_schema_ws)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
case 1:
if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values_ws)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, 1); __PYX_ERR(0, 70, __pyx_L3_error)
}
case 2:
if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kw_list)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, 2); __PYX_ERR(0, 70, __pyx_L3_error)
}
case 3:
if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_chunks)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, 3); __PYX_ERR(0, 70, __pyx_L3_error)
}
case 4:
if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time_limit)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, 4); __PYX_ERR(0, 70, __pyx_L3_error)
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 70, __pyx_L3_error)
}
} else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
}
__pyx_v_schema_ws = values[0];
__pyx_v_values_ws = values[1];
__pyx_v_kw_list = values[2];
__pyx_v_chunks = values[3];
__pyx_v_time_limit = values[4];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 70, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.QueryContext.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_12QueryContext___cinit__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *)__pyx_v_self), __pyx_v_schema_ws, __pyx_v_values_ws, __pyx_v_kw_list, __pyx_v_chunks, __pyx_v_time_limit);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_12QueryContext___cinit__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *__pyx_v_self, PyObject *__pyx_v_schema_ws, PyObject *__pyx_v_values_ws, PyObject *__pyx_v_kw_list, PyObject *__pyx_v_chunks, PyObject *__pyx_v_time_limit) {
clock_t __pyx_v_start;
clock_t __pyx_v_end;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.QueryContext.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+071: self.schema_ws = dict(schema_ws)
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_schema_ws); __Pyx_GIVEREF(__pyx_v_schema_ws); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_schema_ws); __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyDict_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->schema_ws); __Pyx_DECREF(__pyx_v_self->schema_ws); __pyx_v_self->schema_ws = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+072: self.values_ws = dict(values_ws)
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 72, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_values_ws); __Pyx_GIVEREF(__pyx_v_values_ws); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_values_ws); __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyDict_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 72, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->values_ws); __Pyx_DECREF(__pyx_v_self->values_ws); __pyx_v_self->values_ws = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+073: self.kw_list = kw_list
if (!(likely(PyList_CheckExact(__pyx_v_kw_list))||((__pyx_v_kw_list) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_kw_list)->tp_name), 0))) __PYX_ERR(0, 73, __pyx_L1_error) __pyx_t_1 = __pyx_v_kw_list; __Pyx_INCREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->kw_list); __Pyx_DECREF(__pyx_v_self->kw_list); __pyx_v_self->kw_list = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+074: self.n_kw = len(kw_list)
__pyx_t_3 = PyObject_Length(__pyx_v_kw_list); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 74, __pyx_L1_error)
__pyx_v_self->n_kw = __pyx_t_3;
+075: self.n_kw_uniq_no_stopw = len(filter_stopwords(set(kw_list)))
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_filter_stopwords); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_4 = PySet_New(__pyx_v_kw_list); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_5)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_5); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } if (!__pyx_t_5) { __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_GOTREF(__pyx_t_1); } else { __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL; __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0+1, __pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == -1)) __PYX_ERR(0, 75, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_self->n_kw_uniq_no_stopw = __pyx_t_3;
+076: self.chunks = dict(chunks)
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_chunks); __Pyx_GIVEREF(__pyx_v_chunks); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_chunks); __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyDict_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 76, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->chunks); __Pyx_DECREF(__pyx_v_self->chunks); __pyx_v_self->chunks = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
077:
078: # calculate max cpu-time after which execution is not allowed
079: cdef clock_t start, end
+080: start = clock()
__pyx_v_start = clock();
+081: end = start + CLOCKS_PER_SEC * time_limit
__pyx_t_2 = __Pyx_PyInt_From_clock_t(__pyx_v_start); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyInt_From_int(CLOCKS_PER_SEC); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_6 = PyNumber_Multiply(__pyx_t_1, __pyx_v_time_limit); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Add(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_7 = __Pyx_PyInt_As_clock_t(__pyx_t_1); if (unlikely((__pyx_t_7 == (clock_t)-1) && PyErr_Occurred())) __PYX_ERR(0, 81, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_end = __pyx_t_7;
+082: self.time_limit = end
__pyx_v_self->time_limit = __pyx_v_end;
+083: self.time_limit_exceeded = False
__pyx_v_self->time_limit_exceeded = 0;
084:
085:
+086: cdef class PartialSearchResult:
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult {
PyObject_HEAD
struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_vtab;
PyObject *result_type;
int result_type_enumerated;
PyObject *values;
PyObject *wildcards_set;
PyObject *params_set;
PyObject *greps;
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_default;
PyObject *kw_used;
double score;
PyObject *trace;
};
/* … */
struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult {
PyObject *(*init)(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *, struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *);
PyObject *(*reset)(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *, PyObject *, PyObject *, double, struct __pyx_opt_args_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_reset *__pyx_optional_args);
};
static struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_vtabptr_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult;
087: """
088: a helper class for storing results.
089: each time calling reset() it is re-initialized with the earlier default object
090: and can be later overridden.
091: """
+092: cdef public str result_type # lookup, shall be str but get: unicode/str
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->result_type);
__pyx_r = __pyx_v_self->result_type;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
if (!(likely(PyString_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 92, __pyx_L1_error)
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->result_type);
__Pyx_DECREF(__pyx_v_self->result_type);
__pyx_v_self->result_type = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.result_type.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_5__del__(PyObject *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_4__del__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_11result_type_4__del__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__", 0);
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->result_type);
__Pyx_DECREF(__pyx_v_self->result_type);
__pyx_v_self->result_type = ((PyObject*)Py_None);
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+093: cdef public bint result_type_enumerated
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_22result_type_enumerated_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_22result_type_enumerated_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_22result_type_enumerated___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_22result_type_enumerated___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->result_type_enumerated); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 93, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.result_type_enumerated.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_22result_type_enumerated_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_22result_type_enumerated_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_22result_type_enumerated_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_22result_type_enumerated_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 93, __pyx_L1_error)
__pyx_v_self->result_type_enumerated = __pyx_t_1;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.result_type_enumerated.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+094: cdef public dict values
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->values);
__pyx_r = __pyx_v_self->values;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 94, __pyx_L1_error)
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->values);
__Pyx_DECREF(__pyx_v_self->values);
__pyx_v_self->values = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.values.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_5__del__(PyObject *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_4__del__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_6values_4__del__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__", 0);
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->values);
__Pyx_DECREF(__pyx_v_self->values);
__pyx_v_self->values = ((PyObject*)Py_None);
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+095: cdef public set wildcards_set, params_set
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->wildcards_set);
__pyx_r = __pyx_v_self->wildcards_set;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 95, __pyx_L1_error)
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->wildcards_set);
__Pyx_DECREF(__pyx_v_self->wildcards_set);
__pyx_v_self->wildcards_set = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.wildcards_set.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_5__del__(PyObject *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_4__del__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_13wildcards_set_4__del__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__", 0);
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->wildcards_set);
__Pyx_DECREF(__pyx_v_self->wildcards_set);
__pyx_v_self->wildcards_set = ((PyObject*)Py_None);
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->params_set);
__pyx_r = __pyx_v_self->params_set;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 95, __pyx_L1_error)
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->params_set);
__Pyx_DECREF(__pyx_v_self->params_set);
__pyx_v_self->params_set = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.params_set.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_5__del__(PyObject *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_4__del__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_10params_set_4__del__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__", 0);
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->params_set);
__Pyx_DECREF(__pyx_v_self->params_set);
__pyx_v_self->params_set = ((PyObject*)Py_None);
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+096: cdef public list greps
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->greps);
__pyx_r = __pyx_v_self->greps;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 96, __pyx_L1_error)
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->greps);
__Pyx_DECREF(__pyx_v_self->greps);
__pyx_v_self->greps = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.greps.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_5__del__(PyObject *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_4__del__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5greps_4__del__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__", 0);
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->greps);
__Pyx_DECREF(__pyx_v_self->greps);
__pyx_v_self->greps = ((PyObject*)Py_None);
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
097: cdef PartialSearchResult default
+098: cdef public set kw_used # TODO: shall it be set instead?
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->kw_used);
__pyx_r = __pyx_v_self->kw_used;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
if (!(likely(PySet_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 98, __pyx_L1_error)
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->kw_used);
__Pyx_DECREF(__pyx_v_self->kw_used);
__pyx_v_self->kw_used = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.kw_used.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_5__del__(PyObject *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_4__del__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_7kw_used_4__del__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__", 0);
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->kw_used);
__Pyx_DECREF(__pyx_v_self->kw_used);
__pyx_v_self->kw_used = ((PyObject*)Py_None);
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+099: cdef public double score
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5score_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5score_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5score___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5score___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 99, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.score.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5score_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5score_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5score_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5score_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
__pyx_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 99, __pyx_L1_error)
__pyx_v_self->score = __pyx_t_1;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.score.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+100: cdef public list trace
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->trace);
__pyx_r = __pyx_v_self->trace;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_2__set__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), ((PyObject *)__pyx_v_value));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_2__set__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_value) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__set__", 0);
if (!(likely(PyList_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(0, 100, __pyx_L1_error)
__pyx_t_1 = __pyx_v_value;
__Pyx_INCREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__Pyx_GOTREF(__pyx_v_self->trace);
__Pyx_DECREF(__pyx_v_self->trace);
__pyx_v_self->trace = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.trace.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_5__del__(PyObject *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_4__del__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_5trace_4__del__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__del__", 0);
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
__Pyx_GOTREF(__pyx_v_self->trace);
__Pyx_DECREF(__pyx_v_self->trace);
__pyx_v_self->trace = ((PyObject*)Py_None);
/* function exit code */
__pyx_r = 0;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
101:
+102: cdef public inline init(self, PartialSearchResult d):
CYTHON_INLINE PyObject *__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_init(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_d) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("init", 0);
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+103: if d:
__pyx_t_1 = __Pyx_PyObject_IsTrue(((PyObject *)__pyx_v_d)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 103, __pyx_L1_error)
if (__pyx_t_1) {
/* … */
goto __pyx_L3;
}
+104: self.result_type = d.result_type
__pyx_t_2 = __pyx_v_d->result_type;
__Pyx_INCREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GOTREF(__pyx_v_self->result_type);
__Pyx_DECREF(__pyx_v_self->result_type);
__pyx_v_self->result_type = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
+105: self.result_type_enumerated = d.result_type_enumerated
__pyx_t_1 = __pyx_v_d->result_type_enumerated;
__pyx_v_self->result_type_enumerated = __pyx_t_1;
+106: self.greps = d.greps[:]
if (unlikely(__pyx_v_d->greps == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 106, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyList_GetSlice(__pyx_v_d->greps, 0, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 106, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GOTREF(__pyx_v_self->greps);
__Pyx_DECREF(__pyx_v_self->greps);
__pyx_v_self->greps = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
+107: self.kw_used = d.kw_used.copy()
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_d->kw_used, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); } } if (__pyx_t_4) { __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 107, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!(likely(PySet_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 107, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->kw_used); __Pyx_DECREF(__pyx_v_self->kw_used); __pyx_v_self->kw_used = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+108: self.score = d.score
__pyx_t_5 = __pyx_v_d->score;
__pyx_v_self->score = __pyx_t_5;
+109: self.trace = d.trace[:]
if (unlikely(__pyx_v_d->trace == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 109, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyList_GetSlice(__pyx_v_d->trace, 0, PY_SSIZE_T_MAX); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 109, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GOTREF(__pyx_v_self->trace);
__Pyx_DECREF(__pyx_v_self->trace);
__pyx_v_self->trace = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
+110: self.values = d.values.copy()
if (unlikely(__pyx_v_d->values == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "copy");
__PYX_ERR(0, 110, __pyx_L1_error)
}
__pyx_t_2 = PyDict_Copy(__pyx_v_d->values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 110, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_GIVEREF(__pyx_t_2);
__Pyx_GOTREF(__pyx_v_self->values);
__Pyx_DECREF(__pyx_v_self->values);
__pyx_v_self->values = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
111:
+112: self.wildcards_set = d.wildcards_set.copy()
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_d->wildcards_set, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); } } if (__pyx_t_4) { __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 112, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!(likely(PySet_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 112, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->wildcards_set); __Pyx_DECREF(__pyx_v_self->wildcards_set); __pyx_v_self->wildcards_set = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+113: self.params_set = d.params_set.copy()
__pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_d->params_set, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_4 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_3, function); } } if (__pyx_t_4) { __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 113, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (!(likely(PySet_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 113, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->params_set); __Pyx_DECREF(__pyx_v_self->params_set); __pyx_v_self->params_set = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
114: else:
+115: self.result_type = ''
/*else*/ {
__Pyx_INCREF(__pyx_kp_s_iso88591_);
__Pyx_GIVEREF(__pyx_kp_s_iso88591_);
__Pyx_GOTREF(__pyx_v_self->result_type);
__Pyx_DECREF(__pyx_v_self->result_type);
__pyx_v_self->result_type = __pyx_kp_s_iso88591_;
+116: self.result_type_enumerated = False
__pyx_v_self->result_type_enumerated = 0;
+117: self.values = {}
__pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 117, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->values); __Pyx_DECREF(__pyx_v_self->values); __pyx_v_self->values = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+118: self.greps = []
__pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 118, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->greps); __Pyx_DECREF(__pyx_v_self->greps); __pyx_v_self->greps = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+119: self.kw_used = set()
__pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 119, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->kw_used); __Pyx_DECREF(__pyx_v_self->kw_used); __pyx_v_self->kw_used = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+120: self.score = 0.0
__pyx_v_self->score = 0.0;
+121: self.trace = []
__pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 121, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->trace); __Pyx_DECREF(__pyx_v_self->trace); __pyx_v_self->trace = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
122:
+123: self.wildcards_set = set()
__pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 123, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->wildcards_set); __Pyx_DECREF(__pyx_v_self->wildcards_set); __pyx_v_self->wildcards_set = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+124: self.params_set = set()
__pyx_t_2 = PySet_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 124, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->params_set); __Pyx_DECREF(__pyx_v_self->params_set); __pyx_v_self->params_set = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0; } __pyx_L3:;
125:
126:
+127: def __cinit__(self, PartialSearchResult d):
/* Python wrapper */
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_1__cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_d = 0;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_d,0};
PyObject* values[1] = {0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
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_d)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(0, 127, __pyx_L3_error)
}
} else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
}
__pyx_v_d = ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)values[0]);
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 127, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return -1;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_d), __pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult, 1, "d", 0))) __PYX_ERR(0, 127, __pyx_L1_error)
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult___cinit__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self), __pyx_v_d);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static int __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult___cinit__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_d) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__cinit__", 0);
/* … */
/* function exit code */
__pyx_r = 0;
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = -1;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
128: # TODO: empty strngs in cython
+129: self.init(d)
__pyx_t_1 = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_init(__pyx_v_self, __pyx_v_d); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 129, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+130: self.default = d
__Pyx_INCREF(((PyObject *)__pyx_v_d)); __Pyx_GIVEREF(((PyObject *)__pyx_v_d)); __Pyx_GOTREF(__pyx_v_self->__pyx_default); __Pyx_DECREF(((PyObject *)__pyx_v_self->__pyx_default)); __pyx_v_self->__pyx_default = __pyx_v_d;
131:
+132: def __str__(self):
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_3__str__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_3__str__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_2__str__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_2__str__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__str__", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+133: return str((self.result_type, self.values))
__Pyx_XDECREF(__pyx_r); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_self->result_type); __Pyx_GIVEREF(__pyx_v_self->result_type); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->result_type); __Pyx_INCREF(__pyx_v_self->values); __Pyx_GIVEREF(__pyx_v_self->values); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_self->values); __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 133, __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(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 133, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
134:
135: # TODO: maybe multipe ops,e.g.:
136: # addGrep
137: # addInput
138: # addValue
+139: cdef reset(self, act, new_kw, double delta_score, field=None,
static PyObject *__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_reset(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_self, PyObject *__pyx_v_act, PyObject *__pyx_v_new_kw, double __pyx_v_delta_score, struct __pyx_opt_args_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_reset *__pyx_optional_args) {
PyObject *__pyx_v_field = ((PyObject *)Py_None);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.PartialSearchResult.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_upd);
__Pyx_XDECREF(__pyx_v_kw);
__Pyx_XDECREF(__pyx_v_t);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_reset {
int __pyx_n;
PyObject *field;
PyObject *new_value;
PyObject *add_grep;
PyObject *grep_req_kwds;
};
+140: new_value=None, add_grep=None, list grep_req_kwds=None):
PyObject *__pyx_v_new_value = ((PyObject *)Py_None); PyObject *__pyx_v_add_grep = ((PyObject *)Py_None); PyObject *__pyx_v_grep_req_kwds = ((PyObject*)Py_None); int __pyx_v__DEBUG_DETAIL; PyObject *__pyx_v_upd = NULL; PyObject *__pyx_v_kw = NULL; PyObject *__pyx_v_t = NULL; PyObject *__pyx_r = NULL; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("reset", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_field = __pyx_optional_args->field; if (__pyx_optional_args->__pyx_n > 1) { __pyx_v_new_value = __pyx_optional_args->new_value; if (__pyx_optional_args->__pyx_n > 2) { __pyx_v_add_grep = __pyx_optional_args->add_grep; if (__pyx_optional_args->__pyx_n > 3) { __pyx_v_grep_req_kwds = __pyx_optional_args->grep_req_kwds; } } } } }
+141: cdef bint _DEBUG_DETAIL = True
__pyx_v__DEBUG_DETAIL = 1;
142:
+143: self.init(self.default)
__pyx_t_1 = ((PyObject *)__pyx_v_self->__pyx_default); __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19PartialSearchResult_init(__pyx_v_self, ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
144:
+145: upd = field
__Pyx_INCREF(__pyx_v_field);
__pyx_v_upd = __pyx_v_field;
146:
+147: if field and (act =='lookup' or act == 'lookup-enum'):
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_field); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 147, __pyx_L1_error) if (__pyx_t_4) { } else { __pyx_t_3 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_act, __pyx_n_s_iso88591_lookup, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 147, __pyx_L1_error) if (!__pyx_t_4) { } else { __pyx_t_3 = __pyx_t_4; goto __pyx_L4_bool_binop_done; } __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_act, __pyx_kp_s_iso88591_lookup_enum, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 147, __pyx_L1_error) __pyx_t_3 = __pyx_t_4; __pyx_L4_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+148: self.result_type = str(field)
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_field); __Pyx_GIVEREF(__pyx_v_field); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_field); __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(PyString_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 148, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_1); __Pyx_GOTREF(__pyx_v_self->result_type); __Pyx_DECREF(__pyx_v_self->result_type); __pyx_v_self->result_type = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+149: if act == 'lookup-enum':
__pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_act, __pyx_kp_s_iso88591_lookup_enum, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 149, __pyx_L1_error)
if (__pyx_t_3) {
/* … */
}
+150: self.result_type_enumerated = True
__pyx_v_self->result_type_enumerated = 1;
+151: upd = field
__Pyx_INCREF(__pyx_v_field); __Pyx_DECREF_SET(__pyx_v_upd, __pyx_v_field);
152:
+153: if act == 'val+result_type':
__pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_act, __pyx_kp_s_iso88591_val_result_type, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 153, __pyx_L1_error)
if (__pyx_t_3) {
/* … */
}
+154: self.result_type = str(field)
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_field); __Pyx_GIVEREF(__pyx_v_field); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_field); __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (!(likely(PyString_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 154, __pyx_L1_error) __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_self->result_type); __Pyx_DECREF(__pyx_v_self->result_type); __pyx_v_self->result_type = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+155: self.result_type_enumerated = False
__pyx_v_self->result_type_enumerated = 0;
156:
157:
+158: if new_kw:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_new_kw); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 158, __pyx_L1_error)
if (__pyx_t_3) {
/* … */
}
+159: self.kw_used.add(new_kw)
if (unlikely(__pyx_v_self->kw_used == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add");
__PYX_ERR(0, 159, __pyx_L1_error)
}
__pyx_t_5 = PySet_Add(__pyx_v_self->kw_used, __pyx_v_new_kw); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 159, __pyx_L1_error)
160:
161:
+162: if act == 'grep' and add_grep and grep_req_kwds:
__pyx_t_4 = (__Pyx_PyString_Equals(__pyx_v_act, __pyx_n_s_iso88591_grep, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 162, __pyx_L1_error) if (__pyx_t_4) { } else { __pyx_t_3 = __pyx_t_4; goto __pyx_L11_bool_binop_done; } __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_add_grep); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 162, __pyx_L1_error) if (__pyx_t_4) { } else { __pyx_t_3 = __pyx_t_4; goto __pyx_L11_bool_binop_done; } __pyx_t_4 = (__pyx_v_grep_req_kwds != Py_None) && (PyList_GET_SIZE(__pyx_v_grep_req_kwds) != 0); __pyx_t_3 = __pyx_t_4; __pyx_L11_bool_binop_done:; if (__pyx_t_3) { /* … */ }
+163: upd = str(add_grep)
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_add_grep); __Pyx_GIVEREF(__pyx_v_add_grep); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_add_grep); __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_upd, __pyx_t_1); __pyx_t_1 = 0;
164:
+165: self.greps.append(add_grep)
if (unlikely(__pyx_v_self->greps == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
__PYX_ERR(0, 165, __pyx_L1_error)
}
__pyx_t_5 = __Pyx_PyList_Append(__pyx_v_self->greps, __pyx_v_add_grep); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 165, __pyx_L1_error)
+166: for kw in grep_req_kwds:
if (unlikely(__pyx_v_grep_req_kwds == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
__PYX_ERR(0, 166, __pyx_L1_error)
}
__pyx_t_1 = __pyx_v_grep_req_kwds; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
for (;;) {
if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
#if CYTHON_COMPILING_IN_CPYTHON
__pyx_t_2 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_2); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 166, __pyx_L1_error)
#else
__pyx_t_2 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
#endif
__Pyx_XDECREF_SET(__pyx_v_kw, __pyx_t_2);
__pyx_t_2 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+167: self.kw_used.add(kw)
if (unlikely(__pyx_v_self->kw_used == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add");
__PYX_ERR(0, 167, __pyx_L1_error)
}
__pyx_t_5 = PySet_Add(__pyx_v_self->kw_used, __pyx_v_kw); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 167, __pyx_L1_error)
168:
169:
+170: if delta_score is not None:
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_delta_score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 170, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = (__pyx_t_1 != Py_None); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = (__pyx_t_3 != 0); if (__pyx_t_4) { /* … */ }
+171: self.score += delta_score
__pyx_v_self->score = (__pyx_v_self->score + __pyx_v_delta_score);
172:
+173: if field and new_value:
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_field); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 173, __pyx_L1_error) if (__pyx_t_3) { } else { __pyx_t_4 = __pyx_t_3; goto __pyx_L18_bool_binop_done; } __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_new_value); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 173, __pyx_L1_error) __pyx_t_4 = __pyx_t_3; __pyx_L18_bool_binop_done:; if (__pyx_t_4) { /* … */ }
174: # TODO: or we could modify the var only if needed
+175: self.values[field] = new_value
if (unlikely(__pyx_v_self->values == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 175, __pyx_L1_error)
}
if (unlikely(PyDict_SetItem(__pyx_v_self->values, __pyx_v_field, __pyx_v_new_value) < 0)) __PYX_ERR(0, 175, __pyx_L1_error)
+176: self.params_set.add(field)
if (unlikely(__pyx_v_self->params_set == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add");
__PYX_ERR(0, 176, __pyx_L1_error)
}
__pyx_t_5 = PySet_Add(__pyx_v_self->params_set, __pyx_v_field); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 176, __pyx_L1_error)
+177: if '*' in new_value:
__pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_iso88591__2, __pyx_v_new_value, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 177, __pyx_L1_error)
__pyx_t_3 = (__pyx_t_4 != 0);
if (__pyx_t_3) {
/* … */
}
+178: self.wildcards_set.add(field)
if (unlikely(__pyx_v_self->wildcards_set == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "add");
__PYX_ERR(0, 178, __pyx_L1_error)
}
__pyx_t_5 = PySet_Add(__pyx_v_self->wildcards_set, __pyx_v_field); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 178, __pyx_L1_error)
+179: upd = '%s=%s' % (field, new_value)
__pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_field); __Pyx_GIVEREF(__pyx_v_field); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_field); __Pyx_INCREF(__pyx_v_new_value); __Pyx_GIVEREF(__pyx_v_new_value); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_new_value); __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_iso88591_s_s, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 179, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_upd, __pyx_t_2); __pyx_t_2 = 0;
180:
181: # disable extensive trace in production as it's not shown to users...
+182: if TRACE:
__pyx_t_3 = (__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_TRACE != 0);
if (__pyx_t_3) {
/* … */
}
+183: if _DEBUG_DETAIL:
__pyx_t_3 = (__pyx_v__DEBUG_DETAIL != 0);
if (__pyx_t_3) {
/* … */
}
+184: upd += "; params: %s; kw_used: %s, no rt: %s, sc: %.2f" % \
__pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_iso88591_params_s_kw_used_s_no_rt_s_sc_2, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyNumber_InPlaceAdd(__pyx_v_upd, __pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 184, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __Pyx_DECREF_SET(__pyx_v_upd, __pyx_t_9); __pyx_t_9 = 0;
+185: (str(self.params_set),
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self->params_set); __Pyx_GIVEREF(__pyx_v_self->params_set); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->params_set); __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 185, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_1); __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_t_7); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_8); __pyx_t_1 = 0; __pyx_t_7 = 0; __pyx_t_2 = 0; __pyx_t_8 = 0;
+186: str(self.kw_used),
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_self->kw_used); __Pyx_GIVEREF(__pyx_v_self->kw_used); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_self->kw_used); __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_2, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 186, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+187: str(self.result_type_enumerated),
__pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->result_type_enumerated); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 187, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+188: self.score
__pyx_t_8 = PyFloat_FromDouble(__pyx_v_self->score); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 188, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8);
189: )
+190: t = (new_kw, act, upd, '%.2f' % exp(delta_score))
__pyx_t_9 = PyFloat_FromDouble(exp(__pyx_v_delta_score)); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 190, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __pyx_t_8 = __Pyx_PyString_Format(__pyx_kp_s_iso88591_2f, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 190, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; __pyx_t_9 = PyTuple_New(4); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 190, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_INCREF(__pyx_v_new_kw); __Pyx_GIVEREF(__pyx_v_new_kw); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_v_new_kw); __Pyx_INCREF(__pyx_v_act); __Pyx_GIVEREF(__pyx_v_act); PyTuple_SET_ITEM(__pyx_t_9, 1, __pyx_v_act); __Pyx_INCREF(__pyx_v_upd); __Pyx_GIVEREF(__pyx_v_upd); PyTuple_SET_ITEM(__pyx_t_9, 2, __pyx_v_upd); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 3, __pyx_t_8); __pyx_t_8 = 0; __pyx_v_t = ((PyObject*)__pyx_t_9); __pyx_t_9 = 0;
+191: self.trace.append(t)
if (unlikely(__pyx_v_self->trace == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
__PYX_ERR(0, 191, __pyx_L1_error)
}
__pyx_t_5 = __Pyx_PyList_Append(__pyx_v_self->trace, __pyx_v_t); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 191, __pyx_L1_error)
192:
+193: return self
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(((PyObject *)__pyx_v_self)); __pyx_r = ((PyObject *)__pyx_v_self); goto __pyx_L0;
194:
195:
196:
197: #object *aggregations
198:
199: # INITIALIZATION
200:
201:
202: #ctypedef cset[string] ApiParamSet
203: #ctypedef pair[ApiParamList, ApiParamList] ApiParamDefinition
204:
205: # Construct the C-Style List of Api Parameter declarations
206:
207:
208: # TODO: for now using just plain python types
+209: cdef class ApiParamDefinition:
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition {
PyObject_HEAD
PyObject *api_params_set;
PyObject *req_params;
PyObject *lookup;
};
+210: cdef readonly frozenset api_params_set, req_params
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_14api_params_set_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_14api_params_set_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_14api_params_set___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_14api_params_set___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->api_params_set);
__pyx_r = __pyx_v_self->api_params_set;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_10req_params_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_10req_params_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_10req_params___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_10req_params___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->req_params);
__pyx_r = __pyx_v_self->req_params;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+211: cdef readonly str lookup
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_6lookup_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_6lookup_1__get__(PyObject *__pyx_v_self) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_6lookup___get__(((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *)__pyx_v_self));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_18ApiParamDefinition_6lookup___get__(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *__pyx_v_self) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("__get__", 0);
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_v_self->lookup);
__pyx_r = __pyx_v_self->lookup;
goto __pyx_L0;
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
212:
+213: cpdef ApiParamDefinition create_api_param_definition(frozenset api_params_set, frozenset req_params, str lookup):
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_3create_api_param_definition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_create_api_param_definition(PyObject *__pyx_v_api_params_set, PyObject *__pyx_v_req_params, PyObject *__pyx_v_lookup, CYTHON_UNUSED int __pyx_skip_dispatch) {
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *__pyx_v_inst = 0;
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("create_api_param_definition", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.create_api_param_definition", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_inst);
__Pyx_XGIVEREF((PyObject *)__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_3create_api_param_definition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_3create_api_param_definition(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_api_params_set = 0;
PyObject *__pyx_v_req_params = 0;
PyObject *__pyx_v_lookup = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("create_api_param_definition (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_api_params_set,&__pyx_n_s_req_params,&__pyx_n_s_lookup,0};
PyObject* values[3] = {0,0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
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_api_params_set)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
case 1:
if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_req_params)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("create_api_param_definition", 1, 3, 3, 1); __PYX_ERR(0, 213, __pyx_L3_error)
}
case 2:
if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lookup)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("create_api_param_definition", 1, 3, 3, 2); __PYX_ERR(0, 213, __pyx_L3_error)
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create_api_param_definition") < 0)) __PYX_ERR(0, 213, __pyx_L3_error)
}
} else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
}
__pyx_v_api_params_set = ((PyObject*)values[0]);
__pyx_v_req_params = ((PyObject*)values[1]);
__pyx_v_lookup = ((PyObject*)values[2]);
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("create_api_param_definition", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 213, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.create_api_param_definition", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_api_params_set), (&PyFrozenSet_Type), 1, "api_params_set", 1))) __PYX_ERR(0, 213, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_req_params), (&PyFrozenSet_Type), 1, "req_params", 1))) __PYX_ERR(0, 213, __pyx_L1_error)
if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_lookup), (&PyString_Type), 1, "lookup", 1))) __PYX_ERR(0, 213, __pyx_L1_error)
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_2create_api_param_definition(__pyx_self, __pyx_v_api_params_set, __pyx_v_req_params, __pyx_v_lookup);
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__pyx_r = NULL;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_2create_api_param_definition(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_api_params_set, PyObject *__pyx_v_req_params, PyObject *__pyx_v_lookup) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("create_api_param_definition", 0);
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = ((PyObject *)__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_create_api_param_definition(__pyx_v_api_params_set, __pyx_v_req_params, __pyx_v_lookup, 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 213, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.create_api_param_definition", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
+214: cdef ApiParamDefinition inst = ApiParamDefinition.__new__(ApiParamDefinition)
__pyx_t_1 = __pyx_tp_new_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition(((PyTypeObject *)__pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 214, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition)))) __PYX_ERR(0, 214, __pyx_L1_error) __pyx_v_inst = ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *)__pyx_t_1); __pyx_t_1 = 0;
+215: inst.api_params_set = api_params_set
__Pyx_INCREF(__pyx_v_api_params_set); __Pyx_GIVEREF(__pyx_v_api_params_set); __Pyx_GOTREF(__pyx_v_inst->api_params_set); __Pyx_DECREF(__pyx_v_inst->api_params_set); __pyx_v_inst->api_params_set = __pyx_v_api_params_set;
+216: inst.req_params = req_params
__Pyx_INCREF(__pyx_v_req_params); __Pyx_GIVEREF(__pyx_v_req_params); __Pyx_GOTREF(__pyx_v_inst->req_params); __Pyx_DECREF(__pyx_v_inst->req_params); __pyx_v_inst->req_params = __pyx_v_req_params;
+217: inst.lookup = lookup
__Pyx_INCREF(__pyx_v_lookup); __Pyx_GIVEREF(__pyx_v_lookup); __Pyx_GOTREF(__pyx_v_inst->lookup); __Pyx_DECREF(__pyx_v_inst->lookup); __pyx_v_inst->lookup = __pyx_v_lookup;
+218: return inst
__Pyx_XDECREF(((PyObject *)__pyx_r)); __Pyx_INCREF(((PyObject *)__pyx_v_inst)); __pyx_r = __pyx_v_inst; goto __pyx_L0;
219:
220: # GLOBALS
221: #cdef clist[char*] lookup_keys = schema.lookup_keys
222: #cdef vector[ApiParamDefinition] api_definitions = vector[ApiParamDefinition]()
+223: cdef list api_definitions = list()
__pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 223, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_api_definitions); __Pyx_DECREF_SET(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_api_definitions, ((PyObject*)__pyx_t_2)); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0;
+224: cdef list lookup_keys = list()
__pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 224, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_XGOTREF(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_lookup_keys); __Pyx_DECREF_SET(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_lookup_keys, ((PyObject*)__pyx_t_2)); __Pyx_GIVEREF(__pyx_t_2); __pyx_t_2 = 0;
225:
226:
+227: def initialize_ranker(schema):
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_5initialize_ranker(PyObject *__pyx_self, PyObject *__pyx_v_schema); /*proto*/
static char __pyx_doc_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_4initialize_ranker[] = " initialize the ranker: update cached data (cython) ";
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_5initialize_ranker = {"initialize_ranker", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_5initialize_ranker, METH_O, __pyx_doc_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_4initialize_ranker};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_5initialize_ranker(PyObject *__pyx_self, PyObject *__pyx_v_schema) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("initialize_ranker (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_4initialize_ranker(__pyx_self, ((PyObject *)__pyx_v_schema));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_4initialize_ranker(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_schema) {
PyObject *__pyx_v_api_params = NULL;
PyObject *__pyx_v_req_params = NULL;
PyObject *__pyx_v_lookup = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("initialize_ranker", 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_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.initialize_ranker", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_api_params);
__Pyx_XDECREF(__pyx_v_req_params);
__Pyx_XDECREF(__pyx_v_lookup);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__13 = PyTuple_Pack(4, __pyx_n_s_schema, __pyx_n_s_api_params, __pyx_n_s_req_params, __pyx_n_s_lookup); if (unlikely(!__pyx_tuple__13)) __PYX_ERR(0, 227, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__13);
__Pyx_GIVEREF(__pyx_tuple__13);
/* … */
__pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_5initialize_ranker, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 227, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_initialize_ranker, __pyx_t_2) < 0) __PYX_ERR(0, 227, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_codeobj__14 = (PyObject*)__Pyx_PyCode_New(1, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__13, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_vk_CMS_DMWM_GIT_DAS_src_p, __pyx_n_s_initialize_ranker, 227, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__14)) __PYX_ERR(0, 227, __pyx_L1_error)
228: """ initialize the ranker: update cached data (cython) """
229: global lookup_keys, api_definitions
+230: lookup_keys = schema.lookup_keys
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_schema, __pyx_n_s_lookup_keys); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (!(likely(PyList_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 230, __pyx_L1_error) __Pyx_XGOTREF(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_lookup_keys); __Pyx_DECREF_SET(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_lookup_keys, ((PyObject*)__pyx_t_1)); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0;
+231: api_definitions = list()
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_XGOTREF(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_api_definitions); __Pyx_DECREF_SET(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_api_definitions, ((PyObject*)__pyx_t_1)); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0;
+232: for api_params, req_params, lookup in schema.get_api_param_definitions():
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_schema, __pyx_n_s_get_api_param_definitions); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && 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, 232, __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, 232, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) { __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_5 = Py_TYPE(__pyx_t_2)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 232, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_2))) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 232, __pyx_L1_error) #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } else { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_2)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_4); __Pyx_INCREF(__pyx_t_1); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 232, __pyx_L1_error) #else __pyx_t_1 = PySequence_ITEM(__pyx_t_2, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); #endif } } else { __pyx_t_1 = __pyx_t_5(__pyx_t_2); if (unlikely(!__pyx_t_1)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 232, __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_CPYTHON Py_ssize_t size = Py_SIZE(sequence); #else Py_ssize_t size = PySequence_Size(sequence); #endif if (unlikely(size != 3)) { if (size > 3) __Pyx_RaiseTooManyValuesError(3); else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size); __PYX_ERR(0, 232, __pyx_L1_error) } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); } else { __pyx_t_3 = PyList_GET_ITEM(sequence, 0); __pyx_t_6 = PyList_GET_ITEM(sequence, 1); __pyx_t_7 = PyList_GET_ITEM(sequence, 2); } __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; } else { Py_ssize_t index = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 232, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; index = 0; __pyx_t_3 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_3)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_3); index = 1; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 2; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 3) < 0) __PYX_ERR(0, 232, __pyx_L1_error) __pyx_t_9 = NULL; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 232, __pyx_L1_error) __pyx_L6_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_api_params, __pyx_t_3); __pyx_t_3 = 0; __Pyx_XDECREF_SET(__pyx_v_req_params, __pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_lookup, __pyx_t_7); __pyx_t_7 = 0; /* … */ } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+233: api_definitions.append(create_api_param_definition(
if (unlikely(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_api_definitions == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "append");
__PYX_ERR(0, 233, __pyx_L1_error)
}
/* … */
__pyx_t_6 = ((PyObject *)__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_create_api_param_definition(((PyObject*)__pyx_t_1), ((PyObject*)__pyx_t_7), ((PyObject*)__pyx_t_3), 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 233, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_10 = __Pyx_PyList_Append(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_api_definitions, __pyx_t_6); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 233, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+234: api_params_set=frozenset(api_params),
__pyx_t_1 = __Pyx_PyFrozenSet_New(__pyx_v_api_params); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1);
+235: req_params=frozenset(req_params),
__pyx_t_7 = __Pyx_PyFrozenSet_New(__pyx_v_req_params); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 235, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
+236: lookup=str(lookup)))
__pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_lookup); __Pyx_GIVEREF(__pyx_v_lookup); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_lookup); __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 236, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; if (!(likely(PyString_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_t_3)->tp_name), 0))) __PYX_ERR(0, 236, __pyx_L1_error)
237:
238:
239: #inline
+240: cdef bint are_wildcards_allowed(str entity, set wildcards, set params):
static int __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_are_wildcards_allowed(PyObject *__pyx_v_entity, PyObject *__pyx_v_wildcards, PyObject *__pyx_v_params) {
int __pyx_v_ok;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("are_wildcards_allowed", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_WriteUnraisable("DAS.keywordsearch.rankers.fast_recursive_ranker.are_wildcards_allowed", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
241: """
242: Whether wildcards are allowed for given inputs
243:
244: currently only these simple rules allowed:
245: site=W*
246: dataset=W*
247: dataset site=T1_CH_*
248: dataset site=T1_CH_* dataset=/BprimeBprimeToBZBZinc_M-375_7TeV-madgraph/Summer11-START311_V2-v3/GEN
249: file dataset=/DoubleMu/Run2012A-Zmmg-13Jul2012-v1/RAW-RECO site=T1_*
250: file block=/DoubleMu/Run2012A-Zmmg-13Jul2012-v1/RAW-RECO#b45f3476-cfb6-11e1-bb62-00221959e69e
251: file file=W* dataset=FULL
252: file file=W* block=FULL
253:
254: # these are supported (probably) because of DAS-wrappers
255: file dataset=*DoubleMuParked25ns*
256: file dataset=*DoubleMuParked25ns* site=T2_RU_JINR
257: """
258: # TODO: shall we allow params not defined in the rules?
+259: cdef bint ok = True
__pyx_v_ok = 1;
+260: if not wildcards or not entity:
__pyx_t_2 = (__pyx_v_wildcards != Py_None) && (PySet_GET_SIZE(__pyx_v_wildcards) != 0); __pyx_t_3 = ((!__pyx_t_2) != 0); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L4_bool_binop_done; } __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_entity); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 260, __pyx_L1_error) __pyx_t_2 = ((!__pyx_t_3) != 0); __pyx_t_1 = __pyx_t_2; __pyx_L4_bool_binop_done:; if (__pyx_t_1) { /* … */ }
+261: return True
__pyx_r = 1;
goto __pyx_L0;
262:
263: # TODO: how to compare cset's?
264:
+265: if entity == 'dataset' and wildcards == set(['dataset.name',]):
__pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_entity, __pyx_n_s_iso88591_dataset, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 265, __pyx_L1_error) __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L7_bool_binop_done; } __pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 265, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PySet_Add(__pyx_t_4, __pyx_kp_s_iso88591_dataset_name) < 0) __PYX_ERR(0, 265, __pyx_L1_error) __pyx_t_5 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 265, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 265, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __pyx_t_3; __pyx_L7_bool_binop_done:; if (__pyx_t_1) { goto __pyx_L6; }
266: pass
+267: elif entity == 'file' and wildcards == set(['file.name',]) and \
__pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_entity, __pyx_n_s_iso88591_file, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L9_bool_binop_done; } __pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 267, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PySet_Add(__pyx_t_5, __pyx_kp_s_iso88591_file_name) < 0) __PYX_ERR(0, 267, __pyx_L1_error) __pyx_t_4 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 267, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 267, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L9_bool_binop_done; } /* … */ if (__pyx_t_1) { goto __pyx_L6; }
+268: ('dataset.name' in params or 'block.name' in params):
__pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_iso88591_dataset_name, __pyx_v_params, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 268, __pyx_L1_error) __pyx_t_3 = (__pyx_t_2 != 0); if (!__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L9_bool_binop_done; } __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_iso88591_block_name, __pyx_v_params, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 268, __pyx_L1_error) __pyx_t_2 = (__pyx_t_3 != 0); __pyx_t_1 = __pyx_t_2; __pyx_L9_bool_binop_done:;
269: pass
+270: elif entity == 'file' and wildcards == set(['site.name',]) and \
__pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_entity, __pyx_n_s_iso88591_file, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 270, __pyx_L1_error) __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L13_bool_binop_done; } __pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PySet_Add(__pyx_t_4, __pyx_kp_s_iso88591_site_name) < 0) __PYX_ERR(0, 270, __pyx_L1_error) __pyx_t_5 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 270, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L13_bool_binop_done; } /* … */ if (__pyx_t_1) { goto __pyx_L6; }
+271: ('dataset.name' in params or 'block.name' in params):
__pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_iso88591_dataset_name, __pyx_v_params, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 271, __pyx_L1_error) __pyx_t_2 = (__pyx_t_3 != 0); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L13_bool_binop_done; } __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_iso88591_block_name, __pyx_v_params, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 271, __pyx_L1_error) __pyx_t_3 = (__pyx_t_2 != 0); __pyx_t_1 = __pyx_t_3; __pyx_L13_bool_binop_done:;
272: pass
+273: elif entity == 'site' and wildcards == set(['site.name',]):
__pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_entity, __pyx_n_s_iso88591_site, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 273, __pyx_L1_error) __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L17_bool_binop_done; } __pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PySet_Add(__pyx_t_5, __pyx_kp_s_iso88591_site_name) < 0) __PYX_ERR(0, 273, __pyx_L1_error) __pyx_t_4 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 273, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L17_bool_binop_done:; if (__pyx_t_1) { goto __pyx_L6; }
274: pass
+275: elif entity == 'dataset' and wildcards == set(['site.name',]):
__pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_entity, __pyx_n_s_iso88591_dataset, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 275, __pyx_L1_error) __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L19_bool_binop_done; } __pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 275, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PySet_Add(__pyx_t_4, __pyx_kp_s_iso88591_site_name) < 0) __PYX_ERR(0, 275, __pyx_L1_error) __pyx_t_5 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 275, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 275, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __pyx_t_3; __pyx_L19_bool_binop_done:; if (__pyx_t_1) { goto __pyx_L6; }
276: pass
+277: elif entity == 'dataset' and wildcards == set(['dataset.name', 'site.name']):
__pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_entity, __pyx_n_s_iso88591_dataset, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 277, __pyx_L1_error) __pyx_t_2 = (__pyx_t_3 != 0); if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L21_bool_binop_done; } __pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 277, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PySet_Add(__pyx_t_5, __pyx_kp_s_iso88591_dataset_name) < 0) __PYX_ERR(0, 277, __pyx_L1_error) if (PySet_Add(__pyx_t_5, __pyx_kp_s_iso88591_site_name) < 0) __PYX_ERR(0, 277, __pyx_L1_error) __pyx_t_4 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 277, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 277, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L21_bool_binop_done:; if (__pyx_t_1) { goto __pyx_L6; }
278: pass
+279: elif entity == 'dataset' and wildcards <= set (['dataset.name', 'release.name']):
__pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_entity, __pyx_n_s_iso88591_dataset, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 279, __pyx_L1_error) __pyx_t_3 = (__pyx_t_2 != 0); if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L23_bool_binop_done; } __pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PySet_Add(__pyx_t_4, __pyx_kp_s_iso88591_dataset_name) < 0) __PYX_ERR(0, 279, __pyx_L1_error) if (PySet_Add(__pyx_t_4, __pyx_kp_s_iso88591_release_name) < 0) __PYX_ERR(0, 279, __pyx_L1_error) __pyx_t_5 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_4, Py_LE); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 279, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __pyx_t_3; __pyx_L23_bool_binop_done:; if (__pyx_t_1) { goto __pyx_L6; }
280: pass
281: # these are supported (probably) because of DAS-wrapper
+282: elif entity == 'file' and (
__pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_entity, __pyx_n_s_iso88591_file, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 282, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_3 != 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L25_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
goto __pyx_L6;
}
+283: wildcards == set(['site.name', 'dataset.name']) or
__pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 283, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PySet_Add(__pyx_t_5, __pyx_kp_s_iso88591_site_name) < 0) __PYX_ERR(0, 283, __pyx_L1_error) if (PySet_Add(__pyx_t_5, __pyx_kp_s_iso88591_dataset_name) < 0) __PYX_ERR(0, 283, __pyx_L1_error) __pyx_t_4 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 283, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 283, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L25_bool_binop_done; }
+284: wildcards == set(['site.name', 'block.name']) or
__pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 284, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PySet_Add(__pyx_t_4, __pyx_kp_s_iso88591_site_name) < 0) __PYX_ERR(0, 284, __pyx_L1_error) if (PySet_Add(__pyx_t_4, __pyx_kp_s_iso88591_block_name) < 0) __PYX_ERR(0, 284, __pyx_L1_error) __pyx_t_5 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 284, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 284, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L25_bool_binop_done; }
+285: wildcards == set(['dataset.name']) or
__pyx_t_5 = PySet_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); if (PySet_Add(__pyx_t_5, __pyx_kp_s_iso88591_dataset_name) < 0) __PYX_ERR(0, 285, __pyx_L1_error) __pyx_t_4 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_5, Py_EQ); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 285, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L25_bool_binop_done; }
+286: wildcards == set(['block.name'])
__pyx_t_4 = PySet_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); if (PySet_Add(__pyx_t_4, __pyx_kp_s_iso88591_block_name) < 0) __PYX_ERR(0, 286, __pyx_L1_error) __pyx_t_5 = PyObject_RichCompare(__pyx_v_wildcards, __pyx_t_4, Py_EQ); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 286, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L25_bool_binop_done:;
287: ):
288: pass
289: else:
+290: ok = False
/*else*/ {
__pyx_v_ok = 0;
}
__pyx_L6:;
+291: return ok
__pyx_r = __pyx_v_ok; goto __pyx_L0;
292:
293:
294: # TODO: for now we use python types...
+295: cdef bint validate_input_params_das_cpy(set params, str entity, bint final_step, set wildcards):
static int __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_validate_input_params_das_cpy(PyObject *__pyx_v_params, PyObject *__pyx_v_entity, int __pyx_v_final_step, PyObject *__pyx_v_wildcards) {
PyObject *__pyx_v_lookup = NULL;
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *__pyx_v_api_item = 0;
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("validate_input_params_das_cpy", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_XDECREF(__pyx_t_9);
__Pyx_WriteUnraisable("DAS.keywordsearch.rankers.fast_recursive_ranker.validate_input_params_das_cpy", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_lookup);
__Pyx_XDECREF((PyObject *)__pyx_v_api_item);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
296: """
297: slightly cython-optimized version of schema.validate_input_params
298: """
299: # could still be added later...
+300: if final_step and not entity:
__pyx_t_2 = (__pyx_v_final_step != 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L4_bool_binop_done;
}
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_entity); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 300, __pyx_L1_error)
__pyx_t_3 = ((!__pyx_t_2) != 0);
__pyx_t_1 = __pyx_t_3;
__pyx_L4_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
+301: return False
__pyx_r = 0;
goto __pyx_L0;
302:
303: # check if wildcards are allowed
304: # TODO: this is just a quick hack to use lookup instead of PK
305: # TODO: now entity is a lookup? but not always as matching returns PK ...
+306: lookup = entity and entity.split('.')[0]
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_entity); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 306, __pyx_L1_error) if (__pyx_t_1) { } else { __Pyx_INCREF(__pyx_v_entity); __pyx_t_4 = __pyx_v_entity; goto __pyx_L6_bool_binop_done; } __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_entity, __pyx_n_s_split); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_5 = __Pyx_GetItemInt(__pyx_t_6, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_INCREF(__pyx_t_5); __pyx_t_4 = __pyx_t_5; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_L6_bool_binop_done:; __pyx_v_lookup = __pyx_t_4; __pyx_t_4 = 0; /* … */ __pyx_tuple__4 = PyTuple_Pack(1, __pyx_kp_s_iso88591__3); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 306, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__4); __Pyx_GIVEREF(__pyx_tuple__4);
307: #cdef char*
308: #long_entity = lookup and lookup.split(',')[0] + '.name'
+309: if final_step and wildcards and \
__pyx_t_3 = (__pyx_v_final_step != 0);
if (__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_3 = (__pyx_v_wildcards != Py_None) && (PySet_GET_SIZE(__pyx_v_wildcards) != 0);
if (__pyx_t_3) {
} else {
__pyx_t_1 = __pyx_t_3;
goto __pyx_L9_bool_binop_done;
}
/* … */
if (__pyx_t_1) {
/* … */
}
+310: not are_wildcards_allowed(lookup, wildcards, params):
if (!(likely(PyString_CheckExact(__pyx_v_lookup))||((__pyx_v_lookup) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_lookup)->tp_name), 0))) __PYX_ERR(0, 310, __pyx_L1_error) __pyx_t_3 = ((!(__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_are_wildcards_allowed(((PyObject*)__pyx_v_lookup), __pyx_v_wildcards, __pyx_v_params) != 0)) != 0); __pyx_t_1 = __pyx_t_3; __pyx_L9_bool_binop_done:;
+311: return False
__pyx_r = 0;
goto __pyx_L0;
312:
313: # given input parameters mapping (from keywords to input parameters)
314: # there must exist an API, covering these input params
315: cdef ApiParamDefinition api_item
+316: for api_item in api_definitions:
if (unlikely(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_api_definitions == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
__PYX_ERR(0, 316, __pyx_L1_error)
}
__pyx_t_4 = __pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_api_definitions; __Pyx_INCREF(__pyx_t_4); __pyx_t_7 = 0;
for (;;) {
if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_4)) break;
#if CYTHON_COMPILING_IN_CPYTHON
__pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 316, __pyx_L1_error)
#else
__pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 316, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
#endif
if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition))))) __PYX_ERR(0, 316, __pyx_L1_error)
__Pyx_XDECREF_SET(__pyx_v_api_item, ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_ApiParamDefinition *)__pyx_t_5));
__pyx_t_5 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+317: if params.issubset(api_item.api_params_set) and \
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_params, __pyx_n_s_issubset); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_8 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_8)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_8); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_8) { __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_api_item->api_params_set); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } else { __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_9); __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL; __Pyx_INCREF(__pyx_v_api_item->api_params_set); __Pyx_GIVEREF(__pyx_v_api_item->api_params_set); PyTuple_SET_ITEM(__pyx_t_9, 0+1, __pyx_v_api_item->api_params_set); __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_9, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 317, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 317, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_3) { } else { __pyx_t_1 = __pyx_t_3; goto __pyx_L15_bool_binop_done; } /* … */ if (__pyx_t_1) { /* … */ }
+318: (not lookup or lookup == api_item.lookup):
__pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_lookup); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 318, __pyx_L1_error) __pyx_t_2 = ((!__pyx_t_3) != 0); if (!__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L15_bool_binop_done; } __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_lookup, __pyx_v_api_item->lookup, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 318, __pyx_L1_error) __pyx_t_1 = __pyx_t_2; __pyx_L15_bool_binop_done:;
+319: if not final_step:
__pyx_t_1 = ((!(__pyx_v_final_step != 0)) != 0);
if (__pyx_t_1) {
/* … */
}
+320: return True
__pyx_r = 1;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L0;
+321: if params.issuperset(api_item.req_params):
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_params, __pyx_n_s_issuperset); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_9 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_9)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_9); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_9) { __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_api_item->req_params); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); } else { __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9); __pyx_t_9 = NULL; __Pyx_INCREF(__pyx_v_api_item->req_params); __Pyx_GIVEREF(__pyx_v_api_item->req_params); PyTuple_SET_ITEM(__pyx_t_8, 0+1, __pyx_v_api_item->req_params); __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_8, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 321, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; if (__pyx_t_1) { /* … */ }
+322: return True
__pyx_r = 1;
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
goto __pyx_L0;
323:
+324: return False
__pyx_r = 0; goto __pyx_L0;
325:
326:
+327: def is_valid_result_py(params_set, result_type, final_step, wildcards):
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_7is_valid_result_py(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_7is_valid_result_py = {"is_valid_result_py", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_7is_valid_result_py, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_7is_valid_result_py(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_params_set = 0;
PyObject *__pyx_v_result_type = 0;
PyObject *__pyx_v_final_step = 0;
PyObject *__pyx_v_wildcards = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("is_valid_result_py (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_params_set,&__pyx_n_s_result_type,&__pyx_n_s_final_step,&__pyx_n_s_wildcards,0};
PyObject* values[4] = {0,0,0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
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_params_set)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
case 1:
if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result_type)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("is_valid_result_py", 1, 4, 4, 1); __PYX_ERR(0, 327, __pyx_L3_error)
}
case 2:
if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_final_step)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("is_valid_result_py", 1, 4, 4, 2); __PYX_ERR(0, 327, __pyx_L3_error)
}
case 3:
if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_wildcards)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("is_valid_result_py", 1, 4, 4, 3); __PYX_ERR(0, 327, __pyx_L3_error)
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "is_valid_result_py") < 0)) __PYX_ERR(0, 327, __pyx_L3_error)
}
} else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
}
__pyx_v_params_set = values[0];
__pyx_v_result_type = values[1];
__pyx_v_final_step = values[2];
__pyx_v_wildcards = values[3];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("is_valid_result_py", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 327, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.is_valid_result_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_6is_valid_result_py(__pyx_self, __pyx_v_params_set, __pyx_v_result_type, __pyx_v_final_step, __pyx_v_wildcards);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_6is_valid_result_py(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_params_set, PyObject *__pyx_v_result_type, PyObject *__pyx_v_final_step, PyObject *__pyx_v_wildcards) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("is_valid_result_py", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.is_valid_result_py", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__15 = PyTuple_Pack(4, __pyx_n_s_params_set, __pyx_n_s_result_type, __pyx_n_s_final_step, __pyx_n_s_wildcards); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(0, 327, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__15);
__Pyx_GIVEREF(__pyx_tuple__15);
/* … */
__pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_7is_valid_result_py, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 327, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_is_valid_result_py, __pyx_t_2) < 0) __PYX_ERR(0, 327, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(4, 0, 4, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_vk_CMS_DMWM_GIT_DAS_src_p, __pyx_n_s_is_valid_result_py, 327, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(0, 327, __pyx_L1_error)
328: # TODO: now PartialSearchResult could be a direct argument...
+329: return validate_input_params_das_cpy(
__Pyx_XDECREF(__pyx_r); /* … */ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_validate_input_params_das_cpy(((PyObject*)__pyx_v_params_set), ((PyObject*)__pyx_v_result_type), __pyx_t_1, ((PyObject*)__pyx_v_wildcards))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 329, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
+330: params_set, result_type, final_step, wildcards)
if (!(likely(PySet_CheckExact(__pyx_v_params_set))||((__pyx_v_params_set) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_params_set)->tp_name), 0))) __PYX_ERR(0, 330, __pyx_L1_error) if (!(likely(PyString_CheckExact(__pyx_v_result_type))||((__pyx_v_result_type) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "str", Py_TYPE(__pyx_v_result_type)->tp_name), 0))) __PYX_ERR(0, 330, __pyx_L1_error) __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_final_step); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 330, __pyx_L1_error) if (!(likely(PySet_CheckExact(__pyx_v_wildcards))||((__pyx_v_wildcards) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_v_wildcards)->tp_name), 0))) __PYX_ERR(0, 330, __pyx_L1_error)
331:
332:
+333: cdef inline bint is_valid_result(PartialSearchResult _r, bint final_step=False):
static CYTHON_INLINE int __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_is_valid_result(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v__r, struct __pyx_opt_args_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_is_valid_result *__pyx_optional_args) {
int __pyx_v_final_step = ((int)0);
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("is_valid_result", 0);
if (__pyx_optional_args) {
if (__pyx_optional_args->__pyx_n > 0) {
__pyx_v_final_step = __pyx_optional_args->final_step;
}
}
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_is_valid_result {
int __pyx_n;
int final_step;
};
334: # TODO: now PartialSearchResult could be a direct argument...
+335: return validate_input_params_das_cpy(_r.params_set,
__pyx_t_1 = __pyx_v__r->params_set; __Pyx_INCREF(__pyx_t_1); /* … */ __pyx_r = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_validate_input_params_das_cpy(((PyObject*)__pyx_t_1), ((PyObject*)__pyx_t_2), __pyx_v_final_step, ((PyObject*)__pyx_t_3)); __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_L0;
+336: entity=_r.result_type,
__pyx_t_2 = __pyx_v__r->result_type;
__Pyx_INCREF(__pyx_t_2);
337: final_step=final_step,
+338: wildcards=_r.wildcards_set)
__pyx_t_3 = __pyx_v__r->wildcards_set;
__Pyx_INCREF(__pyx_t_3);
339:
+340: def perform_search(schema_ws, values_ws, kw_list, chunks, time_limit=3):
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_9perform_search(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_9perform_search = {"perform_search", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_9perform_search, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_9perform_search(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_schema_ws = 0;
PyObject *__pyx_v_values_ws = 0;
PyObject *__pyx_v_kw_list = 0;
PyObject *__pyx_v_chunks = 0;
PyObject *__pyx_v_time_limit = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("perform_search (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_schema_ws,&__pyx_n_s_values_ws,&__pyx_n_s_kw_list,&__pyx_n_s_chunks,&__pyx_n_s_time_limit,0};
PyObject* values[5] = {0,0,0,0,0};
values[4] = ((PyObject *)__pyx_int_3);
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);
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
case 3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
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_schema_ws)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
case 1:
if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values_ws)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("perform_search", 0, 4, 5, 1); __PYX_ERR(0, 340, __pyx_L3_error)
}
case 2:
if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kw_list)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("perform_search", 0, 4, 5, 2); __PYX_ERR(0, 340, __pyx_L3_error)
}
case 3:
if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_chunks)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("perform_search", 0, 4, 5, 3); __PYX_ERR(0, 340, __pyx_L3_error)
}
case 4:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_time_limit);
if (value) { values[4] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "perform_search") < 0)) __PYX_ERR(0, 340, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
case 4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_schema_ws = values[0];
__pyx_v_values_ws = values[1];
__pyx_v_kw_list = values[2];
__pyx_v_chunks = values[3];
__pyx_v_time_limit = values[4];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("perform_search", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 340, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.perform_search", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_8perform_search(__pyx_self, __pyx_v_schema_ws, __pyx_v_values_ws, __pyx_v_kw_list, __pyx_v_chunks, __pyx_v_time_limit);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_8perform_search(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_schema_ws, PyObject *__pyx_v_values_ws, PyObject *__pyx_v_kw_list, PyObject *__pyx_v_chunks, PyObject *__pyx_v_time_limit) {
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *__pyx_v_c = 0;
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_r = 0;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("perform_search", 0);
__Pyx_INCREF(__pyx_v_values_ws);
/* … */
/* function exit code */
__pyx_r = Py_None; __Pyx_INCREF(Py_None);
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker.perform_search", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_c);
__Pyx_XDECREF((PyObject *)__pyx_v_r);
__Pyx_XDECREF(__pyx_v_values_ws);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__17 = PyTuple_Pack(7, __pyx_n_s_schema_ws, __pyx_n_s_values_ws, __pyx_n_s_kw_list, __pyx_n_s_chunks, __pyx_n_s_time_limit, __pyx_n_s_c, __pyx_n_s_r); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(0, 340, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__17);
__Pyx_GIVEREF(__pyx_tuple__17);
/* … */
__pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_9perform_search, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 340, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_perform_search, __pyx_t_2) < 0) __PYX_ERR(0, 340, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(5, 0, 7, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_vk_CMS_DMWM_GIT_DAS_src_p, __pyx_n_s_perform_search, 340, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(0, 340, __pyx_L1_error)
+341: values_ws = cleanup_values_weights(values_ws)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_cleanup_values_weights); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } if (!__pyx_t_3) { __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_values_ws); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } else { __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL; __Pyx_INCREF(__pyx_v_values_ws); __Pyx_GIVEREF(__pyx_v_values_ws); PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_values_ws); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 341, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_values_ws, __pyx_t_1); __pyx_t_1 = 0;
342:
+343: cdef QueryContext c = QueryContext(schema_ws=schema_ws,
__pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_schema_ws, __pyx_v_schema_ws) < 0) __PYX_ERR(0, 343, __pyx_L1_error) /* … */ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext), __pyx_empty_tuple, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 343, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_c = ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *)__pyx_t_2); __pyx_t_2 = 0;
+344: values_ws=values_ws,
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_values_ws, __pyx_v_values_ws) < 0) __PYX_ERR(0, 343, __pyx_L1_error)
+345: kw_list=kw_list,
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_kw_list, __pyx_v_kw_list) < 0) __PYX_ERR(0, 343, __pyx_L1_error)
+346: chunks=chunks,
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_chunks, __pyx_v_chunks) < 0) __PYX_ERR(0, 343, __pyx_L1_error)
+347: time_limit=time_limit)
if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_time_limit, __pyx_v_time_limit) < 0) __PYX_ERR(0, 343, __pyx_L1_error)
348:
+349: cdef PartialSearchResult r = PartialSearchResult(None)
__pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult), __pyx_tuple__5, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_v_r = ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_t_2); __pyx_t_2 = 0; /* … */ __pyx_tuple__5 = PyTuple_Pack(1, Py_None); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 349, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__5); __Pyx_GIVEREF(__pyx_tuple__5);
+350: run_search(c, r, i=0)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_run_search(__pyx_v_c, __pyx_v_r, 0);
+351: if c.time_limit_exceeded:
__pyx_t_5 = (__pyx_v_c->time_limit_exceeded != 0);
if (__pyx_t_5) {
/* … */
}
+352: raise TimeLimitExceeded()
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TimeLimitExceeded); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 352, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_4 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_1))) { __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_1); if (likely(__pyx_t_4)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1); __Pyx_INCREF(__pyx_t_4); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_1, function); } } if (__pyx_t_4) { __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 352, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 352, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_Raise(__pyx_t_2, 0, 0, 0); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __PYX_ERR(0, 352, __pyx_L1_error)
353:
354:
355:
+356: cdef void seach_for_filters(QueryContext c, PartialSearchResult _r, int i):
static void __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_seach_for_filters(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *__pyx_v_c, struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v__r, int __pyx_v_i) {
PyObject *__pyx_v_requested_entity_short = NULL;
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_r = 0;
PyObject *__pyx_v_chunks = 0;
PyObject *__pyx_v_match = 0;
int __pyx_v_index;
PyObject *__pyx_v_target_fieldname = NULL;
PyObject *__pyx_v_req_kwds = NULL;
PyObject *__pyx_v_target = NULL;
PyObject *__pyx_v_delta_score = NULL;
PyObject *__pyx_v_pred = NULL;
PyObject *__pyx_v_tokens = NULL;
PyObject *__pyx_v_penalties = NULL;
PyObject *__pyx_v_kwd = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("seach_for_filters", 0);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_WriteUnraisable("DAS.keywordsearch.rankers.fast_recursive_ranker.seach_for_filters", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_requested_entity_short);
__Pyx_XDECREF((PyObject *)__pyx_v_r);
__Pyx_XDECREF(__pyx_v_chunks);
__Pyx_XDECREF(__pyx_v_match);
__Pyx_XDECREF(__pyx_v_target_fieldname);
__Pyx_XDECREF(__pyx_v_req_kwds);
__Pyx_XDECREF(__pyx_v_target);
__Pyx_XDECREF(__pyx_v_delta_score);
__Pyx_XDECREF(__pyx_v_pred);
__Pyx_XDECREF(__pyx_v_tokens);
__Pyx_XDECREF(__pyx_v_penalties);
__Pyx_XDECREF(__pyx_v_kwd);
__Pyx_RefNannyFinishContext();
}
+357: if check_time_limit(c):
__pyx_t_1 = (__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_check_time_limit(__pyx_v_c) != 0);
if (__pyx_t_1) {
/* … */
}
+358: return
goto __pyx_L0;
359:
+360: requested_entity_short = _r.result_type.split('.')[0]
__pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v__r->result_type, __pyx_n_s_split); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_3, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_requested_entity_short = __pyx_t_2; __pyx_t_2 = 0; /* … */ __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s_iso88591__3); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 360, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__6); __Pyx_GIVEREF(__pyx_tuple__6);
361:
+362: cdef PartialSearchResult r = PartialSearchResult(_r)
__pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(((PyObject *)__pyx_v__r)); __Pyx_GIVEREF(((PyObject *)__pyx_v__r)); PyTuple_SET_ITEM(__pyx_t_2, 0, ((PyObject *)__pyx_v__r)); __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult), __pyx_t_2, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 362, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_r = ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_t_3); __pyx_t_3 = 0;
363:
+364: cdef list chunks = c.chunks.get(requested_entity_short, [])
if (unlikely(__pyx_v_c->chunks == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
__PYX_ERR(0, 364, __pyx_L1_error)
}
__pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 364, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = __Pyx_PyDict_GetItemDefault(__pyx_v_c->chunks, __pyx_v_requested_entity_short, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 364, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
if (!(likely(PyList_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 364, __pyx_L1_error)
__pyx_v_chunks = ((PyObject*)__pyx_t_2);
__pyx_t_2 = 0;
365: cdef dict match
366: cdef int index
367:
+368: for index in xrange(i, len(chunks)):
if (unlikely(__pyx_v_chunks == Py_None)) {
PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
__PYX_ERR(0, 368, __pyx_L1_error)
}
__pyx_t_4 = PyList_GET_SIZE(__pyx_v_chunks); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 368, __pyx_L1_error)
for (__pyx_t_5 = __pyx_v_i; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
__pyx_v_index = __pyx_t_5;
+369: match = chunks[index]
if (unlikely(__pyx_v_chunks == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 369, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_GetItemInt_List(__pyx_v_chunks, __pyx_v_index, int, 1, __Pyx_PyInt_From_int, 1, 1, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (!(likely(PyDict_CheckExact(__pyx_t_2))||((__pyx_t_2) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_2)->tp_name), 0))) __PYX_ERR(0, 369, __pyx_L1_error)
__Pyx_XDECREF_SET(__pyx_v_match, ((PyObject*)__pyx_t_2));
__pyx_t_2 = 0;
+370: target_fieldname = match['field_name']
if (unlikely(__pyx_v_match == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 370, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_match, __pyx_n_s_iso88591_field_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_target_fieldname, __pyx_t_2);
__pyx_t_2 = 0;
371:
372: # we are anyway including this into filter
+373: if target_fieldname == _r.result_type:
__pyx_t_1 = (__Pyx_PyString_Equals(__pyx_v_target_fieldname, __pyx_v__r->result_type, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 373, __pyx_L1_error)
if (__pyx_t_1) {
/* … */
}
+374: continue
goto __pyx_L4_continue;
375:
+376: req_kwds = match['tokens_required']
if (unlikely(__pyx_v_match == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 376, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_match, __pyx_n_s_iso88591_tokens_required); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 376, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_req_kwds, __pyx_t_2);
__pyx_t_2 = 0;
377: # if all required keywords are still available
+378: if set(req_kwds).isdisjoint(_r.kw_used) and \
__pyx_t_3 = PySet_New(__pyx_v_req_kwds); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_isdisjoint); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_3 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_6); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_6, function); } } if (!__pyx_t_3) { __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v__r->kw_used); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); } else { __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL; __Pyx_INCREF(__pyx_v__r->kw_used); __Pyx_GIVEREF(__pyx_v__r->kw_used); PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v__r->kw_used); __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 378, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_8) { } else { __pyx_t_1 = __pyx_t_8; goto __pyx_L8_bool_binop_done; } /* … */ if (__pyx_t_1) { /* … */ } __pyx_L4_continue:; }
+379: (target_fieldname not in _r.greps):
__pyx_t_8 = (__Pyx_PySequence_ContainsTF(__pyx_v_target_fieldname, __pyx_v__r->greps, Py_NE)); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 379, __pyx_L1_error)
__pyx_t_9 = (__pyx_t_8 != 0);
__pyx_t_1 = __pyx_t_9;
__pyx_L8_bool_binop_done:;
+380: if DEBUG: print 'required fields available for:', match
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_1) { __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_kp_s_iso88591_required_fields_available_for); __Pyx_GIVEREF(__pyx_kp_s_iso88591_required_fields_available_for); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_kp_s_iso88591_required_fields_available_for); __Pyx_INCREF(__pyx_v_match); __Pyx_GIVEREF(__pyx_v_match); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_match); if (__Pyx_Print(0, __pyx_t_2, 1) < 0) __PYX_ERR(0, 380, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; }
381:
+382: target = target_fieldname
__Pyx_INCREF(__pyx_v_target_fieldname); __Pyx_XDECREF_SET(__pyx_v_target, __pyx_v_target_fieldname);
383:
+384: delta_score = match['score']
if (unlikely(__pyx_v_match == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 384, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_match, __pyx_n_s_iso88591_score); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 384, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_delta_score, __pyx_t_2);
__pyx_t_2 = 0;
385:
+386: if match['predicate']:
if (unlikely(__pyx_v_match == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 386, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_match, __pyx_n_s_iso88591_predicate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 386, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 386, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_1) {
/* … */
}
+387: pred = match['predicate']
if (unlikely(__pyx_v_match == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 387, __pyx_L1_error)
}
__pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_match, __pyx_n_s_iso88591_predicate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 387, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_XDECREF_SET(__pyx_v_pred, __pyx_t_2);
__pyx_t_2 = 0;
+388: target = (target_fieldname, pred['op'], pred['param'])
__pyx_t_2 = PyObject_GetItem(__pyx_v_pred, __pyx_n_s_iso88591_op); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_6 = PyObject_GetItem(__pyx_v_pred, __pyx_n_s_iso88591_param); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 388, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_INCREF(__pyx_v_target_fieldname); __Pyx_GIVEREF(__pyx_v_target_fieldname); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_v_target_fieldname); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_2); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_t_6); __pyx_t_2 = 0; __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_target, __pyx_t_7); __pyx_t_7 = 0;
389:
+390: tokens = match['tokens_required_non_stopw'] # filter_stopwords(match['tokens_required'])
if (unlikely(__pyx_v_match == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 390, __pyx_L1_error)
}
__pyx_t_7 = __Pyx_PyDict_GetItem(__pyx_v_match, __pyx_n_s_iso88591_tokens_required_non_stopw); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 390, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_XDECREF_SET(__pyx_v_tokens, __pyx_t_7);
__pyx_t_7 = 0;
+391: if len(tokens) == 1:
__pyx_t_10 = PyObject_Length(__pyx_v_tokens); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 391, __pyx_L1_error)
__pyx_t_1 = ((__pyx_t_10 == 1) != 0);
if (__pyx_t_1) {
/* … */
goto __pyx_L12;
}
392: # TODO: these penalties shall be moved within entry points (?)
+393: delta_score += penalize_highly_possible_schema_terms_as_values(
__pyx_t_6 = PyFloat_FromDouble(__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_penalize_highly_possible_schema_terms_as_values(__pyx_t_7, Py_None)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __pyx_t_7 = PyNumber_InPlaceAdd(__pyx_v_delta_score, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 393, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF_SET(__pyx_v_delta_score, __pyx_t_7); __pyx_t_7 = 0;
+394: tokens[0], None)
__pyx_t_7 = __Pyx_GetItemInt(__pyx_v_tokens, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 394, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7);
395: else:
396:
+397: penalties = [penalize_highly_possible_schema_terms_as_values(
/*else*/ {
__pyx_t_7 = PyList_New(0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 397, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
/* … */
__pyx_t_2 = PyFloat_FromDouble(__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_penalize_highly_possible_schema_terms_as_values(__pyx_v_kwd, Py_None)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 397, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (unlikely(__Pyx_ListComp_Append(__pyx_t_7, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 397, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+398: kwd, None) for kwd in tokens]
if (likely(PyList_CheckExact(__pyx_v_tokens)) || PyTuple_CheckExact(__pyx_v_tokens)) { __pyx_t_6 = __pyx_v_tokens; __Pyx_INCREF(__pyx_t_6); __pyx_t_10 = 0; __pyx_t_11 = NULL; } else { __pyx_t_10 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_tokens); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_11 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 398, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_11)) { if (likely(PyList_CheckExact(__pyx_t_6))) { if (__pyx_t_10 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 398, __pyx_L1_error) #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); #endif } else { if (__pyx_t_10 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_10); __Pyx_INCREF(__pyx_t_2); __pyx_t_10++; if (unlikely(0 < 0)) __PYX_ERR(0, 398, __pyx_L1_error) #else __pyx_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_10); __pyx_t_10++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 398, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); #endif } } else { __pyx_t_2 = __pyx_t_11(__pyx_t_6); if (unlikely(!__pyx_t_2)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 398, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_2); } __Pyx_XDECREF_SET(__pyx_v_kwd, __pyx_t_2); __pyx_t_2 = 0; /* … */ } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_penalties, ((PyObject*)__pyx_t_7)); __pyx_t_7 = 0;
399: # for now, use average
+400: delta_score += len(penalties) and sum(penalties) / len(
__pyx_t_10 = PyList_GET_SIZE(__pyx_v_penalties); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 400, __pyx_L1_error) if (!__pyx_t_10) { goto __pyx_L16_next_or; } else { } __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_INCREF(__pyx_v_penalties); __Pyx_GIVEREF(__pyx_v_penalties); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_penalties); __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; /* … */ __pyx_t_10 = PyList_GET_SIZE(__pyx_v_penalties); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 400, __pyx_L1_error) /* … */ __pyx_t_6 = PyInt_FromSsize_t(__pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 400, __pyx_L1_error) if (!__pyx_t_1) { __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; } else { __Pyx_INCREF(__pyx_t_3); __pyx_t_7 = __pyx_t_3; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; goto __pyx_L15_bool_binop_done; } __pyx_L16_next_or:; /* … */ __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_delta_score, __pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 400, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; __Pyx_DECREF_SET(__pyx_v_delta_score, __pyx_t_3); __pyx_t_3 = 0; } __pyx_L12:;
+401: penalties) or 0.0
__pyx_t_3 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 401, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_7 = __pyx_t_3; __pyx_t_3 = 0; __pyx_L15_bool_binop_done:;
402:
403: #_r_filters.append(target)
404:
405: # we count each token separately in scoring
+406: delta_score = len(tokens) * logprob(delta_score)
__pyx_t_10 = PyObject_Length(__pyx_v_tokens); if (unlikely(__pyx_t_10 == -1)) __PYX_ERR(0, 406, __pyx_L1_error) __pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_delta_score); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 406, __pyx_L1_error) __pyx_t_3 = PyFloat_FromDouble((__pyx_t_10 * __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_logprob(__pyx_t_12))); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 406, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF_SET(__pyx_v_delta_score, __pyx_t_3); __pyx_t_3 = 0;
+407: r.reset('grep', new_kw=None, delta_score=delta_score, field=target_fieldname,
__pyx_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_delta_score); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 407, __pyx_L1_error) /* … */ __pyx_t_13.__pyx_n = 4; __pyx_t_13.field = __pyx_v_target_fieldname; __pyx_t_13.new_value = Py_None; __pyx_t_13.add_grep = __pyx_v_target; __pyx_t_13.grep_req_kwds = ((PyObject*)__pyx_v_req_kwds); __pyx_t_3 = ((struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_r->__pyx_vtab)->reset(__pyx_v_r, __pyx_n_s_iso88591_grep, Py_None, __pyx_t_12, &__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 407, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+408: new_value=None, add_grep=target, grep_req_kwds=req_kwds)
if (!(likely(PyList_CheckExact(__pyx_v_req_kwds))||((__pyx_v_req_kwds) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "list", Py_TYPE(__pyx_v_req_kwds)->tp_name), 0))) __PYX_ERR(0, 408, __pyx_L1_error)
+409: store_result(c, r)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_store_result(__pyx_v_c, __pyx_v_r);
+410: seach_for_filters(c, r, i+1)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_seach_for_filters(__pyx_v_c, __pyx_v_r, (__pyx_v_i + 1));
411:
412:
+413: cdef inline bint check_time_limit(QueryContext c):
static CYTHON_INLINE int __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_check_time_limit(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *__pyx_v_c) {
int __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("check_time_limit", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
414: """
415: check time limit
416: """
417: # TODO: we may throw python exception here, but it may be slighly slower
+418: if clock() > c.time_limit:
__pyx_t_1 = ((clock() > __pyx_v_c->time_limit) != 0);
if (__pyx_t_1) {
/* … */
}
419: # time limit exceeded
420: # TODO: would it help checking time bounds only each whatever # calls
+421: c.time_limit_exceeded = True
__pyx_v_c->time_limit_exceeded = 1;
+422: return True
__pyx_r = 1;
goto __pyx_L0;
+423: return False
__pyx_r = 0; goto __pyx_L0;
424:
425:
426: # TODO: one could do lazy log-score calculation
427: # TODO: nicier exception handling
+428: cdef void run_search(QueryContext c, PartialSearchResult _r,
static void __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_run_search(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *__pyx_v_c, struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v__r, int __pyx_v_i) {
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_r = 0;
PyObject *__pyx_v_lookup = NULL;
PyObject *__pyx_v_kw = NULL;
PyObject *__pyx_v_schema_ws = NULL;
PyObject *__pyx_v_values_ws = NULL;
PyObject *__pyx_v_kw_val = NULL;
CYTHON_UNUSED PyObject *__pyx_v_kw_field = NULL;
PyObject *__pyx_v_op_param = NULL;
PyObject *__pyx_v_score = NULL;
PyObject *__pyx_v_field = NULL;
PyObject *__pyx_v_vscore = NULL;
PyObject *__pyx_v_mapping = NULL;
PyObject *__pyx_v_vfield = NULL;
PyObject *__pyx_v_val = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("run_search", 0);
/* … */
/* function exit code */
goto __pyx_L0;
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_10);
__Pyx_XDECREF(__pyx_t_11);
__Pyx_XDECREF(__pyx_t_13);
__Pyx_XDECREF(__pyx_t_17);
__Pyx_WriteUnraisable("DAS.keywordsearch.rankers.fast_recursive_ranker.run_search", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
__pyx_L0:;
__Pyx_XDECREF((PyObject *)__pyx_v_r);
__Pyx_XDECREF(__pyx_v_lookup);
__Pyx_XDECREF(__pyx_v_kw);
__Pyx_XDECREF(__pyx_v_schema_ws);
__Pyx_XDECREF(__pyx_v_values_ws);
__Pyx_XDECREF(__pyx_v_kw_val);
__Pyx_XDECREF(__pyx_v_kw_field);
__Pyx_XDECREF(__pyx_v_op_param);
__Pyx_XDECREF(__pyx_v_score);
__Pyx_XDECREF(__pyx_v_field);
__Pyx_XDECREF(__pyx_v_vscore);
__Pyx_XDECREF(__pyx_v_mapping);
__Pyx_XDECREF(__pyx_v_vfield);
__Pyx_XDECREF(__pyx_v_val);
__Pyx_RefNannyFinishContext();
}
429: int i): #
430: """
431: classify either as:
432: - input name
433: - input value
434:
435: greps:
436: - grep filter
437: - grep selector
438:
439: not supported yet: aggregation operators (min, max)
440: """
441:
+442: if check_time_limit(c):
__pyx_t_1 = (__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_check_time_limit(__pyx_v_c) != 0);
if (__pyx_t_1) {
/* … */
}
+443: return
goto __pyx_L0;
444:
445: #cdef char* lookup
446: global lookup_keys
447:
448:
449: # is this a valid to continue
+450: if i > 0 and not is_valid_result(_r, False):
__pyx_t_2 = ((__pyx_v_i > 0) != 0);
if (__pyx_t_2) {
} else {
__pyx_t_1 = __pyx_t_2;
goto __pyx_L5_bool_binop_done;
}
__pyx_t_3.__pyx_n = 1;
__pyx_t_3.final_step = 0;
__pyx_t_2 = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_is_valid_result(__pyx_v__r, &__pyx_t_3);
__pyx_t_4 = ((!(__pyx_t_2 != 0)) != 0);
__pyx_t_1 = __pyx_t_4;
__pyx_L5_bool_binop_done:;
if (__pyx_t_1) {
/* … */
}
451: #print 'bad:', _r
+452: return
goto __pyx_L0;
453:
+454: cdef PartialSearchResult r = PartialSearchResult(_r)
__pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_INCREF(((PyObject *)__pyx_v__r)); __Pyx_GIVEREF(((PyObject *)__pyx_v__r)); PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v__r)); __pyx_t_6 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult), __pyx_t_5, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 454, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_r = ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_t_6); __pyx_t_6 = 0;
455:
456: # check if this could be a valid final result
+457: if i >= c.n_kw:
__pyx_t_1 = ((__pyx_v_i >= __pyx_v_c->n_kw) != 0);
if (__pyx_t_1) {
/* … */
}
458: #if not _r.result_type:
459: # print 'lookup:', _r.result_type
460:
+461: if r.result_type and is_valid_result(r, final_step=True):
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_r->result_type); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 461, __pyx_L1_error)
if (__pyx_t_4) {
} else {
__pyx_t_1 = __pyx_t_4;
goto __pyx_L9_bool_binop_done;
}
__pyx_t_3.__pyx_n = 1;
__pyx_t_3.final_step = 1;
__pyx_t_4 = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_is_valid_result(__pyx_v_r, &__pyx_t_3);
__pyx_t_2 = (__pyx_t_4 != 0);
__pyx_t_1 = __pyx_t_2;
__pyx_L9_bool_binop_done:;
if (__pyx_t_1) {
/* … */
goto __pyx_L8;
}
+462: store_result(c, r)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_store_result(__pyx_v_c, __pyx_v_r);
+463: seach_for_filters(c, r, 0)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_seach_for_filters(__pyx_v_c, __pyx_v_r, 0);
464:
+465: elif not _r.result_type:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v__r->result_type); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 465, __pyx_L1_error)
__pyx_t_2 = ((!__pyx_t_1) != 0);
if (__pyx_t_2) {
/* … */
}
__pyx_L8:;
466: #print 'no result type... for:', r
467:
468: # handle the case when result type is NOT mapped
469:
470: # iterate over result types
471: # TODO: this fact must be available afterwards for ranking...
+472: for lookup in lookup_keys:
if (unlikely(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_lookup_keys == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
__PYX_ERR(0, 472, __pyx_L1_error)
}
__pyx_t_6 = __pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_lookup_keys; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0;
for (;;) {
if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break;
#if CYTHON_COMPILING_IN_CPYTHON
__pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 472, __pyx_L1_error)
#else
__pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 472, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
#endif
__Pyx_XDECREF_SET(__pyx_v_lookup, __pyx_t_5);
__pyx_t_5 = 0;
/* … */
}
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
473: # TODO: support multi-value lookup
+474: r.reset('lookup-enum', '',
__pyx_t_9.__pyx_n = 1;
__pyx_t_9.field = __pyx_v_lookup;
__pyx_t_5 = ((struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_r->__pyx_vtab)->reset(__pyx_v_r, __pyx_kp_s_iso88591_lookup_enum, __pyx_kp_s_iso88591_, __pyx_t_8, &__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 474, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
475: # rank multi-term lookup slightly lower
+476: delta_score=-0.001 if ',' in lookup else 0.0,
__pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_iso88591__7, __pyx_v_lookup, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 476, __pyx_L1_error)
if ((__pyx_t_2 != 0)) {
__pyx_t_8 = -0.001;
} else {
__pyx_t_8 = 0.0;
}
477: field = lookup)
+478: if is_valid_result(r, final_step=True):
__pyx_t_3.__pyx_n = 1;
__pyx_t_3.final_step = 1;
__pyx_t_2 = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_is_valid_result(__pyx_v_r, &__pyx_t_3);
__pyx_t_1 = (__pyx_t_2 != 0);
if (__pyx_t_1) {
/* … */
}
+479: store_result(c, r)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_store_result(__pyx_v_c, __pyx_v_r);
480: # search for post filters and aggregations, if any
+481: seach_for_filters(c, r, 0)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_seach_for_filters(__pyx_v_c, __pyx_v_r, 0);
482:
+483: return
goto __pyx_L0;
484:
485:
+486: kw = c.kw_list[i]
if (unlikely(__pyx_v_c->kw_list == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 486, __pyx_L1_error)
}
__pyx_t_6 = __Pyx_GetItemInt_List(__pyx_v_c->kw_list, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 1, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 486, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_v_kw = __pyx_t_6;
__pyx_t_6 = 0;
487:
488: # TODO: what if no kwd mapps into lookup? loop all or try to find which are supported?
489:
490: # skip this KW
491: # TODO: or I could add the score here
+492: run_search(c, _r, i+1)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_run_search(__pyx_v_c, __pyx_v__r, (__pyx_v_i + 1));
493:
+494: schema_ws = c.schema_ws.get(kw, [])
if (unlikely(__pyx_v_c->schema_ws == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
__PYX_ERR(0, 494, __pyx_L1_error)
}
__pyx_t_6 = PyList_New(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 494, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_5 = __Pyx_PyDict_GetItemDefault(__pyx_v_c->schema_ws, __pyx_v_kw, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 494, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_v_schema_ws = __pyx_t_5;
__pyx_t_5 = 0;
+495: values_ws = c.values_ws.get(kw, [])
if (unlikely(__pyx_v_c->values_ws == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
__PYX_ERR(0, 495, __pyx_L1_error)
}
__pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 495, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_6 = __Pyx_PyDict_GetItemDefault(__pyx_v_c->values_ws, __pyx_v_kw, __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_v_values_ws = __pyx_t_6;
__pyx_t_6 = 0;
496:
497:
+498: kw_val = kw.split('=')[-1] # without "=", if any...
__pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_kw, __pyx_n_s_split); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_6 = __Pyx_GetItemInt(__pyx_t_5, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 498, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_kw_val = __pyx_t_6; __pyx_t_6 = 0; /* … */ __pyx_tuple__9 = PyTuple_Pack(1, __pyx_kp_s_iso88591__8); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 498, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__9); __Pyx_GIVEREF(__pyx_tuple__9);
+499: kw_field = get_keyword_without_operator(kw)
__pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_keyword_without_operator); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_10 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_10)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); } } if (!__pyx_t_10) { __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_kw); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } else { __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL; __Pyx_INCREF(__pyx_v_kw); __Pyx_GIVEREF(__pyx_v_kw); PyTuple_SET_ITEM(__pyx_t_11, 0+1, __pyx_v_kw); __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_11, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 499, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_kw_field = __pyx_t_6; __pyx_t_6 = 0;
500:
+501: op_param = get_operator_and_param(kw)
__pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_operator_and_param); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_11 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_11)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); } } if (!__pyx_t_11) { __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_kw); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); } else { __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_11); __pyx_t_11 = NULL; __Pyx_INCREF(__pyx_v_kw); __Pyx_GIVEREF(__pyx_v_kw); PyTuple_SET_ITEM(__pyx_t_10, 0+1, __pyx_v_kw); __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_10, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 501, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_v_op_param = __pyx_t_6; __pyx_t_6 = 0;
502:
503:
504:
+505: for score, field in schema_ws:
if (likely(PyList_CheckExact(__pyx_v_schema_ws)) || PyTuple_CheckExact(__pyx_v_schema_ws)) { __pyx_t_6 = __pyx_v_schema_ws; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0; __pyx_t_12 = NULL; } else { __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_schema_ws); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 505, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_12)) { if (likely(PyList_CheckExact(__pyx_t_6))) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 505, __pyx_L1_error) #else __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif } else { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 505, __pyx_L1_error) #else __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif } } else { __pyx_t_5 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 505, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_5); } if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) { PyObject* sequence = __pyx_t_5; #if CYTHON_COMPILING_IN_CPYTHON 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, 505, __pyx_L1_error) } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_10 = PyList_GET_ITEM(sequence, 0); __pyx_t_11 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_11); #else __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { Py_ssize_t index = -1; __pyx_t_13 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 505, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_13)->tp_iternext; index = 0; __pyx_t_10 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_10)) goto __pyx_L16_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_11 = __pyx_t_14(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L16_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_13), 2) < 0) __PYX_ERR(0, 505, __pyx_L1_error) __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; goto __pyx_L17_unpacking_done; __pyx_L16_unpacking_failed:; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 505, __pyx_L1_error) __pyx_L17_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_11); __pyx_t_11 = 0; /* … */ } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
506: # part of (TODO:possibly multi-daskey) lookup (!)
+507: if not '=' in kw:
__pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_iso88591__8, __pyx_v_kw, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 507, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
+508: r.reset('lookup', new_kw=kw, delta_score=log(score), field = field)
__pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_score); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 508, __pyx_L1_error) __pyx_t_9.__pyx_n = 1; __pyx_t_9.field = __pyx_v_field; __pyx_t_5 = ((struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_r->__pyx_vtab)->reset(__pyx_v_r, __pyx_n_s_iso88591_lookup, __pyx_v_kw, log(__pyx_t_8), &__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 508, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+509: run_search(c, r, i+1)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_run_search(__pyx_v_c, __pyx_v_r, (__pyx_v_i + 1));
510:
511: # input name
+512: if not field in _r.values:
if (unlikely(__pyx_v__r->values == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
__PYX_ERR(0, 512, __pyx_L1_error)
}
__pyx_t_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_field, __pyx_v__r->values, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 512, __pyx_L1_error)
__pyx_t_1 = (__pyx_t_2 != 0);
if (__pyx_t_1) {
/* … */
}
+513: r.values[field] = ''
if (unlikely(__pyx_v_r->values == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
__PYX_ERR(0, 513, __pyx_L1_error)
}
if (unlikely(PyDict_SetItem(__pyx_v_r->values, __pyx_v_field, __pyx_kp_s_iso88591_) < 0)) __PYX_ERR(0, 513, __pyx_L1_error)
+514: r.reset('inputn', new_kw=kw, delta_score=log(score), field=field)
__pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_score); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 514, __pyx_L1_error) __pyx_t_9.__pyx_n = 1; __pyx_t_9.field = __pyx_v_field; __pyx_t_5 = ((struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_r->__pyx_vtab)->reset(__pyx_v_r, __pyx_n_s_iso88591_inputn, __pyx_v_kw, log(__pyx_t_8), &__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 514, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+515: run_search(c, r, i+1)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_run_search(__pyx_v_c, __pyx_v_r, (__pyx_v_i + 1));
516:
517: # TODO: it almost doesn't make sense iterating over schema_ws and when value_ws!!!
518:
519: # some kwds may be in daskey=value form
+520: if op_param and op_param['op'] == '=':
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_op_param); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 520, __pyx_L1_error) if (__pyx_t_2) { } else { __pyx_t_1 = __pyx_t_2; goto __pyx_L21_bool_binop_done; } __pyx_t_5 = PyObject_GetItem(__pyx_v_op_param, __pyx_n_s_iso88591_op); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 520, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_kp_s_iso88591__8, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 520, __pyx_L1_error) __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_1 = __pyx_t_2; __pyx_L21_bool_binop_done:; if (__pyx_t_1) { /* … */ }
+521: for vscore, mapping in values_ws:
if (likely(PyList_CheckExact(__pyx_v_values_ws)) || PyTuple_CheckExact(__pyx_v_values_ws)) { __pyx_t_5 = __pyx_v_values_ws; __Pyx_INCREF(__pyx_t_5); __pyx_t_15 = 0; __pyx_t_16 = NULL; } else { __pyx_t_15 = -1; __pyx_t_5 = PyObject_GetIter(__pyx_v_values_ws); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_16 = Py_TYPE(__pyx_t_5)->tp_iternext; if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 521, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_16)) { if (likely(PyList_CheckExact(__pyx_t_5))) { if (__pyx_t_15 >= PyList_GET_SIZE(__pyx_t_5)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_11 = PyList_GET_ITEM(__pyx_t_5, __pyx_t_15); __Pyx_INCREF(__pyx_t_11); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 521, __pyx_L1_error) #else __pyx_t_11 = PySequence_ITEM(__pyx_t_5, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); #endif } else { if (__pyx_t_15 >= PyTuple_GET_SIZE(__pyx_t_5)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_11 = PyTuple_GET_ITEM(__pyx_t_5, __pyx_t_15); __Pyx_INCREF(__pyx_t_11); __pyx_t_15++; if (unlikely(0 < 0)) __PYX_ERR(0, 521, __pyx_L1_error) #else __pyx_t_11 = PySequence_ITEM(__pyx_t_5, __pyx_t_15); __pyx_t_15++; if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); #endif } } else { __pyx_t_11 = __pyx_t_16(__pyx_t_5); if (unlikely(!__pyx_t_11)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 521, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_11); } if ((likely(PyTuple_CheckExact(__pyx_t_11))) || (PyList_CheckExact(__pyx_t_11))) { PyObject* sequence = __pyx_t_11; #if CYTHON_COMPILING_IN_CPYTHON 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, 521, __pyx_L1_error) } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_10 = PyList_GET_ITEM(sequence, 0); __pyx_t_13 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(__pyx_t_13); #else __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_10); __pyx_t_13 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); #endif __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; } else { Py_ssize_t index = -1; __pyx_t_17 = PyObject_GetIter(__pyx_t_11); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 521, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_17)->tp_iternext; index = 0; __pyx_t_10 = __pyx_t_14(__pyx_t_17); if (unlikely(!__pyx_t_10)) goto __pyx_L25_unpacking_failed; __Pyx_GOTREF(__pyx_t_10); index = 1; __pyx_t_13 = __pyx_t_14(__pyx_t_17); if (unlikely(!__pyx_t_13)) goto __pyx_L25_unpacking_failed; __Pyx_GOTREF(__pyx_t_13); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_17), 2) < 0) __PYX_ERR(0, 521, __pyx_L1_error) __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; goto __pyx_L26_unpacking_done; __pyx_L25_unpacking_failed:; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 521, __pyx_L1_error) __pyx_L26_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_vscore, __pyx_t_10); __pyx_t_10 = 0; __Pyx_XDECREF_SET(__pyx_v_mapping, __pyx_t_13); __pyx_t_13 = 0; /* … */ __pyx_L23_continue:; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+522: vfield = mapping['map_to']
__pyx_t_11 = PyObject_GetItem(__pyx_v_mapping, __pyx_n_s_iso88591_map_to); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 522, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_XDECREF_SET(__pyx_v_vfield, __pyx_t_11); __pyx_t_11 = 0;
+523: val = mapping.get('adjusted_keyword', kw_val)
__pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_mapping, __pyx_n_s_get); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_10 = NULL; __pyx_t_18 = 0; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_13))) { __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_13); if (likely(__pyx_t_10)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_10); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_13, function); __pyx_t_18 = 1; } } __pyx_t_17 = PyTuple_New(2+__pyx_t_18); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (__pyx_t_10) { __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_10); __pyx_t_10 = NULL; } __Pyx_INCREF(__pyx_n_s_iso88591_adjusted_keyword); __Pyx_GIVEREF(__pyx_n_s_iso88591_adjusted_keyword); PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_18, __pyx_n_s_iso88591_adjusted_keyword); __Pyx_INCREF(__pyx_v_kw_val); __Pyx_GIVEREF(__pyx_v_kw_val); PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_18, __pyx_v_kw_val); __pyx_t_11 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_17, NULL); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 523, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_11); __pyx_t_11 = 0;
524:
525: # TODO: reward matches which honor pre-specified daskey=val
+526: if vfield == field:
__pyx_t_11 = PyObject_RichCompare(__pyx_v_vfield, __pyx_v_field, Py_EQ); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 526, __pyx_L1_error) __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 526, __pyx_L1_error) __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0; if (__pyx_t_1) { /* … */ goto __pyx_L27; }
+527: vscore *= 1.6
__pyx_t_11 = PyNumber_InPlaceMultiply(__pyx_v_vscore, __pyx_float_1_6); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 527, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __Pyx_DECREF_SET(__pyx_v_vscore, __pyx_t_11); __pyx_t_11 = 0;
528: else:
+529: continue
/*else*/ {
goto __pyx_L23_continue;
}
__pyx_L27:;
530:
531: # TODO: are A=B currently account as two KWDS in penalize?!
+532: r.reset('val', new_kw=kw,
__pyx_t_9.__pyx_n = 2;
__pyx_t_9.field = __pyx_v_vfield;
__pyx_t_9.new_value = __pyx_v_val;
__pyx_t_11 = ((struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_r->__pyx_vtab)->reset(__pyx_v_r, __pyx_n_s_iso88591_val, __pyx_v_kw, (log(__pyx_t_8) + log(__pyx_t_19)), &__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 532, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_11);
__Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+533: delta_score=log(score)+log(vscore),
__pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_score); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error) __pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_v_vscore); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 533, __pyx_L1_error)
534: field=vfield, new_value=val)
+535: run_search(c, r, i+1)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_run_search(__pyx_v_c, __pyx_v_r, (__pyx_v_i + 1));
536:
537:
538: # value
+539: if not op_param or op_param['op'] == '=':
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_op_param); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 539, __pyx_L1_error) __pyx_t_4 = ((!__pyx_t_2) != 0); if (!__pyx_t_4) { } else { __pyx_t_1 = __pyx_t_4; goto __pyx_L29_bool_binop_done; } __pyx_t_6 = PyObject_GetItem(__pyx_v_op_param, __pyx_n_s_iso88591_op); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 539, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_4 = (__Pyx_PyString_Equals(__pyx_t_6, __pyx_kp_s_iso88591__8, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 539, __pyx_L1_error) __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __pyx_t_1 = __pyx_t_4; __pyx_L29_bool_binop_done:; if (__pyx_t_1) { /* … */ }
+540: for score, mapping in values_ws:
if (likely(PyList_CheckExact(__pyx_v_values_ws)) || PyTuple_CheckExact(__pyx_v_values_ws)) { __pyx_t_6 = __pyx_v_values_ws; __Pyx_INCREF(__pyx_t_6); __pyx_t_7 = 0; __pyx_t_12 = NULL; } else { __pyx_t_7 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_v_values_ws); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_12 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 540, __pyx_L1_error) } for (;;) { if (likely(!__pyx_t_12)) { if (likely(PyList_CheckExact(__pyx_t_6))) { if (__pyx_t_7 >= PyList_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyList_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 540, __pyx_L1_error) #else __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif } else { if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_6)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_6, __pyx_t_7); __Pyx_INCREF(__pyx_t_5); __pyx_t_7++; if (unlikely(0 < 0)) __PYX_ERR(0, 540, __pyx_L1_error) #else __pyx_t_5 = PySequence_ITEM(__pyx_t_6, __pyx_t_7); __pyx_t_7++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); #endif } } else { __pyx_t_5 = __pyx_t_12(__pyx_t_6); if (unlikely(!__pyx_t_5)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 540, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_5); } if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) { PyObject* sequence = __pyx_t_5; #if CYTHON_COMPILING_IN_CPYTHON 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, 540, __pyx_L1_error) } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_13 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_11 = PyList_GET_ITEM(sequence, 0); __pyx_t_13 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(__pyx_t_13); #else __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_11); __pyx_t_13 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); #endif __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; } else { Py_ssize_t index = -1; __pyx_t_17 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 540, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_14 = Py_TYPE(__pyx_t_17)->tp_iternext; index = 0; __pyx_t_11 = __pyx_t_14(__pyx_t_17); if (unlikely(!__pyx_t_11)) goto __pyx_L33_unpacking_failed; __Pyx_GOTREF(__pyx_t_11); index = 1; __pyx_t_13 = __pyx_t_14(__pyx_t_17); if (unlikely(!__pyx_t_13)) goto __pyx_L33_unpacking_failed; __Pyx_GOTREF(__pyx_t_13); if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_17), 2) < 0) __PYX_ERR(0, 540, __pyx_L1_error) __pyx_t_14 = NULL; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; goto __pyx_L34_unpacking_done; __pyx_L33_unpacking_failed:; __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __pyx_t_14 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 540, __pyx_L1_error) __pyx_L34_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_score, __pyx_t_11); __pyx_t_11 = 0; __Pyx_XDECREF_SET(__pyx_v_mapping, __pyx_t_13); __pyx_t_13 = 0; /* … */ } __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+541: field = mapping['map_to']
__pyx_t_5 = PyObject_GetItem(__pyx_v_mapping, __pyx_n_s_iso88591_map_to); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 541, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_XDECREF_SET(__pyx_v_field, __pyx_t_5); __pyx_t_5 = 0;
+542: val = mapping.get('adjusted_keyword', kw_val)
__pyx_t_13 = __Pyx_PyObject_GetAttrStr(__pyx_v_mapping, __pyx_n_s_get); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 542, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_13); __pyx_t_11 = NULL; __pyx_t_15 = 0; if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_13))) { __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_13); if (likely(__pyx_t_11)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_13); __Pyx_INCREF(__pyx_t_11); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_13, function); __pyx_t_15 = 1; } } __pyx_t_17 = PyTuple_New(2+__pyx_t_15); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 542, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_17); if (__pyx_t_11) { __Pyx_GIVEREF(__pyx_t_11); PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_11); __pyx_t_11 = NULL; } __Pyx_INCREF(__pyx_n_s_iso88591_adjusted_keyword); __Pyx_GIVEREF(__pyx_n_s_iso88591_adjusted_keyword); PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_15, __pyx_n_s_iso88591_adjusted_keyword); __Pyx_INCREF(__pyx_v_kw_val); __Pyx_GIVEREF(__pyx_v_kw_val); PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_15, __pyx_v_kw_val); __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_13, __pyx_t_17, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 542, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0; __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0; __Pyx_XDECREF_SET(__pyx_v_val, __pyx_t_5); __pyx_t_5 = 0;
543:
544: # if both field name and value is matched
+545: if _r.values.get(field, False) == '':
if (unlikely(__pyx_v__r->values == Py_None)) {
PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "get");
__PYX_ERR(0, 545, __pyx_L1_error)
}
__pyx_t_5 = __Pyx_PyDict_GetItemDefault(__pyx_v__r->values, __pyx_v_field, Py_False); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 545, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__pyx_t_1 = (__Pyx_PyString_Equals(__pyx_t_5, __pyx_kp_s_iso88591_, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 545, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
if (__pyx_t_1) {
/* … */
}
+546: score *= 1.15
__pyx_t_5 = PyNumber_InPlaceMultiply(__pyx_v_score, __pyx_float_1_15); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 546, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF_SET(__pyx_v_score, __pyx_t_5); __pyx_t_5 = 0;
547:
+548: r.reset('val', new_kw=kw, delta_score=log(score), field=field, new_value=val)
__pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_v_score); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 548, __pyx_L1_error) __pyx_t_9.__pyx_n = 2; __pyx_t_9.field = __pyx_v_field; __pyx_t_9.new_value = __pyx_v_val; __pyx_t_5 = ((struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_r->__pyx_vtab)->reset(__pyx_v_r, __pyx_n_s_iso88591_val, __pyx_v_kw, log(__pyx_t_19), &__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 548, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+549: run_search(c, r, i+1)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_run_search(__pyx_v_c, __pyx_v_r, (__pyx_v_i + 1));
550:
551: # TODO: isn't this expanding the search scope as I'm anyways adding all result_types afterwards!?
552: # and TODO: this complicates the control flow...
+553: if not _r.result_type:
__pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v__r->result_type); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 553, __pyx_L1_error)
__pyx_t_4 = ((!__pyx_t_1) != 0);
if (__pyx_t_4) {
/* … */
}
+554: r.reset('val+result_type', new_kw=kw,
__pyx_t_9.__pyx_n = 2;
__pyx_t_9.field = __pyx_v_field;
__pyx_t_9.new_value = __pyx_v_val;
__pyx_t_5 = ((struct __pyx_vtabstruct_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_v_r->__pyx_vtab)->reset(__pyx_v_r, __pyx_kp_s_iso88591_val_result_type, __pyx_v_kw, (log(__pyx_t_19) + log(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_p_value_as_lookup)), &__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 554, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
555: # TODO: this makes more sense in beginning
+556: delta_score=log(score)+log(p_value_as_lookup), field=field, new_value=val)
__pyx_t_19 = __pyx_PyFloat_AsDouble(__pyx_v_score); if (unlikely((__pyx_t_19 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 556, __pyx_L1_error)
+557: run_search(c, r, i+1)
__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_run_search(__pyx_v_c, __pyx_v_r, (__pyx_v_i + 1));
558:
559:
560:
561:
562:
563:
564: # filters...
565:
566:
+567: cdef void store_result(QueryContext c, PartialSearchResult r):
static void __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_store_result(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *__pyx_v_c, struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_r) {
PyObject *__pyx_v_value_list = NULL;
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_r_new = 0;
double __pyx_v__score;
PyObject *__pyx_v_result = NULL;
PyObject *__pyx_v_heap_tuple = NULL;
CYTHON_UNUSED PyObject *__pyx_v_popped_out = NULL;
PyObject *__pyx_v_k = NULL;
PyObject *__pyx_v_v = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("store_result", 0);
/* … */
/* function exit code */
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_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_XDECREF(__pyx_t_8);
__Pyx_WriteUnraisable("DAS.keywordsearch.rankers.fast_recursive_ranker.store_result", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_value_list);
__Pyx_XDECREF((PyObject *)__pyx_v_r_new);
__Pyx_XDECREF(__pyx_v_result);
__Pyx_XDECREF(__pyx_v_heap_tuple);
__Pyx_XDECREF(__pyx_v_popped_out);
__Pyx_XDECREF(__pyx_v_k);
__Pyx_XDECREF(__pyx_v_v);
__Pyx_RefNannyFinishContext();
}
568: # require some values to be mapped
569:
+570: value_list = [(k, v) for k, v in r.values.items()
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (unlikely(__pyx_v_r->values == Py_None)) { PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "items"); __PYX_ERR(0, 570, __pyx_L1_error) } __pyx_t_2 = __Pyx_PyDict_Items(__pyx_v_r->values); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (likely(PyList_CheckExact(__pyx_t_2)) || PyTuple_CheckExact(__pyx_t_2)) { __pyx_t_3 = __pyx_t_2; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0; __pyx_t_5 = NULL; } else { __pyx_t_4 = -1; __pyx_t_3 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_5 = Py_TYPE(__pyx_t_3)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 570, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; for (;;) { if (likely(!__pyx_t_5)) { if (likely(PyList_CheckExact(__pyx_t_3))) { if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyList_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 570, __pyx_L1_error) #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); #endif } else { if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_2 = PyTuple_GET_ITEM(__pyx_t_3, __pyx_t_4); __Pyx_INCREF(__pyx_t_2); __pyx_t_4++; if (unlikely(0 < 0)) __PYX_ERR(0, 570, __pyx_L1_error) #else __pyx_t_2 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); #endif } } else { __pyx_t_2 = __pyx_t_5(__pyx_t_3); if (unlikely(!__pyx_t_2)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 570, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_2); } if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) { PyObject* sequence = __pyx_t_2; #if CYTHON_COMPILING_IN_CPYTHON 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, 570, __pyx_L1_error) } #if CYTHON_COMPILING_IN_CPYTHON if (likely(PyTuple_CheckExact(sequence))) { __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); } else { __pyx_t_6 = PyList_GET_ITEM(sequence, 0); __pyx_t_7 = PyList_GET_ITEM(sequence, 1); } __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(__pyx_t_7); #else __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); #endif __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { Py_ssize_t index = -1; __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_8); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = Py_TYPE(__pyx_t_8)->tp_iternext; index = 0; __pyx_t_6 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_6)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_6); index = 1; __pyx_t_7 = __pyx_t_9(__pyx_t_8); if (unlikely(!__pyx_t_7)) goto __pyx_L5_unpacking_failed; __Pyx_GOTREF(__pyx_t_7); if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(0, 570, __pyx_L1_error) __pyx_t_9 = NULL; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; goto __pyx_L6_unpacking_done; __pyx_L5_unpacking_failed:; __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0; __pyx_t_9 = NULL; if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index); __PYX_ERR(0, 570, __pyx_L1_error) __pyx_L6_unpacking_done:; } __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_6); __pyx_t_6 = 0; __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_7); __pyx_t_7 = 0; /* … */ __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_v_k); __Pyx_GIVEREF(__pyx_v_k); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_k); __Pyx_INCREF(__pyx_v_v); __Pyx_GIVEREF(__pyx_v_v); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_v); if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_2))) __PYX_ERR(0, 570, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; /* … */ } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_value_list = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
+571: if v != '' ]
__pyx_t_10 = (__Pyx_PyString_Equals(__pyx_v_v, __pyx_kp_s_iso88591_, Py_NE)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 571, __pyx_L1_error)
if (__pyx_t_10) {
/* … */
}
+572: if not value_list:
__pyx_t_10 = (__pyx_v_value_list != Py_None) && (PyList_GET_SIZE(__pyx_v_value_list) != 0);
__pyx_t_11 = ((!__pyx_t_10) != 0);
if (__pyx_t_11) {
/* … */
}
+573: return
goto __pyx_L0;
574:
575:
+576: cdef PartialSearchResult r_new = PartialSearchResult(r)
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 576, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(((PyObject *)__pyx_v_r)); __Pyx_GIVEREF(((PyObject *)__pyx_v_r)); PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_r)); __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult), __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 576, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_r_new = ((struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *)__pyx_t_3); __pyx_t_3 = 0;
577:
+578: cdef double _score = penalize_non_mapped_keywords_(c, r_new)
__pyx_v__score = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_penalize_non_mapped_keywords_(__pyx_v_c, __pyx_v_r_new, NULL);
579:
580: #TODO: struct can be transformed into dict automatically
+581: result = {'score': _score,
__pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyFloat_FromDouble(__pyx_v__score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 581, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_iso88591_score, __pyx_t_1) < 0) __PYX_ERR(0, 581, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+582: 'result_type': r.result_type,
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_iso88591_result_type, __pyx_v_r->result_type) < 0) __PYX_ERR(0, 581, __pyx_L1_error)
+583: 'input_values': value_list,
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_iso88591_input_values, __pyx_v_value_list) < 0) __PYX_ERR(0, 581, __pyx_L1_error)
+584: 'result_filters': tuple(r.greps),
if (unlikely(__pyx_v_r->greps == Py_None)) {
PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
__PYX_ERR(0, 584, __pyx_L1_error)
}
__pyx_t_1 = PyList_AsTuple(__pyx_v_r->greps); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 584, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_iso88591_result_filters, __pyx_t_1) < 0) __PYX_ERR(0, 581, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+585: 'trace': tuple(r_new.trace + [('adjusted_score', _score),]),
__pyx_t_1 = PyFloat_FromDouble(__pyx_v__score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_INCREF(__pyx_n_s_iso88591_adjusted_score); __Pyx_GIVEREF(__pyx_n_s_iso88591_adjusted_score); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_iso88591_adjusted_score); __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_Add(__pyx_v_r_new->trace, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 585, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_iso88591_trace, __pyx_t_1) < 0) __PYX_ERR(0, 581, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+586: 'missing_inputs': []}
__pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 586, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_iso88591_missing_inputs, __pyx_t_1) < 0) __PYX_ERR(0, 581, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_result = ((PyObject*)__pyx_t_3); __pyx_t_3 = 0;
587:
+588: heap_tuple = (_score, result)
__pyx_t_3 = PyFloat_FromDouble(__pyx_v__score); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 588, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_3); __Pyx_INCREF(__pyx_v_result); __Pyx_GIVEREF(__pyx_v_result); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_result); __pyx_t_3 = 0; __pyx_v_heap_tuple = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
589:
+590: if DEBUG:
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 590, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 590, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_t_11) { /* … */ }
+591: print 'adding a result:'
if (__Pyx_PrintOne(0, __pyx_kp_s_iso88591_adding_a_result) < 0) __PYX_ERR(0, 591, __pyx_L1_error)
+592: print heap_tuple
if (__Pyx_PrintOne(0, __pyx_v_heap_tuple) < 0) __PYX_ERR(0, 592, __pyx_L1_error)
593:
594:
595: # store only K-best results (if needed)
+596: if not K_RESULTS_TO_STORE:
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_K_RESULTS_TO_STORE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 596, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_11 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_11 < 0)) __PYX_ERR(0, 596, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_10 = ((!__pyx_t_11) != 0); if (__pyx_t_10) { /* … */ goto __pyx_L10; }
+597: thread_data.results.append(result)
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_thread_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_results); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 597, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_12 = __Pyx_PyObject_Append(__pyx_t_3, __pyx_v_result); if (unlikely(__pyx_t_12 == -1)) __PYX_ERR(0, 597, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
598: else:
+599: if len(thread_data.results) > K_RESULTS_TO_STORE:
/*else*/ {
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_thread_data); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 599, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_results); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_4 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(0, 599, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = PyInt_FromSsize_t(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 599, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_K_RESULTS_TO_STORE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 599, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 599, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 599, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
if (__pyx_t_10) {
/* … */
goto __pyx_L11;
}
600: # this adds the item, and removes the smallest
+601: popped_out = heappushpop(thread_data.results, heap_tuple)
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappushpop); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 601, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_thread_data); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 601, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_results); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 601, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = NULL; __pyx_t_4 = 0; if (CYTHON_COMPILING_IN_CPYTHON && 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; } } __pyx_t_6 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 601, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__pyx_t_1) { __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1); __pyx_t_1 = NULL; } __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_4, __pyx_t_7); __Pyx_INCREF(__pyx_v_heap_tuple); __Pyx_GIVEREF(__pyx_v_heap_tuple); PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_4, __pyx_v_heap_tuple); __pyx_t_7 = 0; __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 601, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_popped_out = __pyx_t_2; __pyx_t_2 = 0;
602: else:
+603: heappush(thread_data.results, heap_tuple)
/*else*/ {
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_heappush); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_thread_data); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_6);
__pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_results); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_7);
__Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
__pyx_t_6 = NULL;
__pyx_t_4 = 0;
if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
__pyx_t_6 = PyMethod_GET_SELF(__pyx_t_3);
if (likely(__pyx_t_6)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
__Pyx_INCREF(__pyx_t_6);
__Pyx_INCREF(function);
__Pyx_DECREF_SET(__pyx_t_3, function);
__pyx_t_4 = 1;
}
}
__pyx_t_1 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (__pyx_t_6) {
__Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_6); __pyx_t_6 = NULL;
}
__Pyx_GIVEREF(__pyx_t_7);
PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_4, __pyx_t_7);
__Pyx_INCREF(__pyx_v_heap_tuple);
__Pyx_GIVEREF(__pyx_v_heap_tuple);
PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_4, __pyx_v_heap_tuple);
__pyx_t_7 = 0;
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 603, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
}
__pyx_L11:;
}
__pyx_L10:;
604:
605:
606:
+607: cdef inline double penalize_non_mapped_keywords_(QueryContext c, PartialSearchResult r,
static CYTHON_INLINE double __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_penalize_non_mapped_keywords_(struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_QueryContext *__pyx_v_c, struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_PartialSearchResult *__pyx_v_r, struct __pyx_opt_args_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_penalize_non_mapped_keywords_ *__pyx_optional_args) {
/* … */
/* 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_WriteUnraisable("DAS.keywordsearch.rankers.fast_recursive_ranker.penalize_non_mapped_keywords_", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_keywords_used);
__Pyx_XDECREF(__pyx_v_keywords_used_no_stopw);
__Pyx_XDECREF(__pyx_v_score);
__Pyx_XDECREF(__pyx_v_keywords_list);
__Pyx_XDECREF(__pyx_v_n_total_kw);
__Pyx_XDECREF(__pyx_v_n_kw_without_stopw);
__Pyx_XDECREF(__pyx_v_n_kw_not_used);
__Pyx_XDECREF(__pyx_v_n_not_mapped_all);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
struct __pyx_opt_args_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_penalize_non_mapped_keywords_ {
int __pyx_n;
PyObject *result_type;
};
+608: result_type=False):
PyObject *__pyx_v_result_type = ((PyObject *)Py_False); PyObject *__pyx_v_keywords_used = NULL; PyObject *__pyx_v_keywords_used_no_stopw = NULL; PyObject *__pyx_v_score = NULL; PyObject *__pyx_v_keywords_list = NULL; PyObject *__pyx_v_n_total_kw = NULL; PyObject *__pyx_v_n_kw_without_stopw = NULL; PyObject *__pyx_v_n_kw_not_used = NULL; double __pyx_v_dscore; PyObject *__pyx_v_n_not_mapped_all = NULL; int __pyx_v_r_type_specified; double __pyx_r; __Pyx_RefNannyDeclarations __Pyx_RefNannySetupContext("penalize_non_mapped_keywords_", 0); if (__pyx_optional_args) { if (__pyx_optional_args->__pyx_n > 0) { __pyx_v_result_type = __pyx_optional_args->result_type; } }
609: """
610: penalizes keywords that have not been mapped.
611: """
+612: keywords_used = r.kw_used
__pyx_t_1 = __pyx_v_r->kw_used;
__Pyx_INCREF(__pyx_t_1);
__pyx_v_keywords_used = ((PyObject*)__pyx_t_1);
__pyx_t_1 = 0;
+613: keywords_used_no_stopw = filter_stopwords(r.kw_used)
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_filter_stopwords); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 613, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) { __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2); if (likely(__pyx_t_3)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2); __Pyx_INCREF(__pyx_t_3); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_2, function); } } if (!__pyx_t_3) { __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_r->kw_used); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 613, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); } else { __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 613, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL; __Pyx_INCREF(__pyx_v_r->kw_used); __Pyx_GIVEREF(__pyx_v_r->kw_used); PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_r->kw_used); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 613, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_v_keywords_used_no_stopw = __pyx_t_1; __pyx_t_1 = 0;
+614: score = r.score
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_r->score); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 614, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_score = __pyx_t_1; __pyx_t_1 = 0;
615:
+616: keywords_list= c.kw_list,
__pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 616, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_c->kw_list); __Pyx_GIVEREF(__pyx_v_c->kw_list); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_c->kw_list); __pyx_v_keywords_list = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
617:
+618: n_total_kw = c.n_kw
__pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_c->n_kw); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 618, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_n_total_kw = __pyx_t_1; __pyx_t_1 = 0;
+619: n_kw_without_stopw = c.n_kw_uniq_no_stopw
__pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_c->n_kw_uniq_no_stopw); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 619, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_v_n_kw_without_stopw = __pyx_t_1; __pyx_t_1 = 0;
620:
621: # TODO: is keywords_used only non-stopword?!
622: # no,but sometimes a semi-stopword can be useful: where, when, .. in beginning of Q
623:
+624: n_kw_not_used = max(n_kw_without_stopw - len(keywords_used_no_stopw), 0)
__pyx_t_5 = 0; __pyx_t_6 = PyObject_Length(__pyx_v_keywords_used_no_stopw); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 624, __pyx_L1_error) __pyx_t_1 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 624, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_Subtract(__pyx_v_n_kw_without_stopw, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 624, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 624, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_t_4, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 624, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 624, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_7) { __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 624, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_1 = __pyx_t_3; __pyx_t_3 = 0; } else { __Pyx_INCREF(__pyx_t_2); __pyx_t_1 = __pyx_t_2; } __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __pyx_t_1; __Pyx_INCREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_n_kw_not_used = __pyx_t_2; __pyx_t_2 = 0;
+625: cdef double dscore = logprob(P_NOT_TAKEN) * n_kw_not_used
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_P_NOT_TAKEN); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 625, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyFloat_FromDouble(__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_logprob(__pyx_t_8)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_n_kw_not_used); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 625, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 625, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_dscore = __pyx_t_8;
626:
+627: score += dscore
__pyx_t_1 = PyFloat_FromDouble(__pyx_v_dscore); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_score, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 627, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_score, __pyx_t_2); __pyx_t_2 = 0;
628:
629: # TODO: shall we map field>=value twice as in averaging approach? then not taking is penalized twice...
630: # we add the score twice anyways...!!!
631: # TODO: how about multi-keyword "qouted string"
632:
+633: n_not_mapped_all = max(n_total_kw - len(keywords_used) - n_kw_not_used,0)
__pyx_t_5 = 0;
if (unlikely(__pyx_v_keywords_used == Py_None)) {
PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
__PYX_ERR(0, 633, __pyx_L1_error)
}
__pyx_t_6 = PySet_GET_SIZE(__pyx_v_keywords_used); if (unlikely(__pyx_t_6 == -1)) __PYX_ERR(0, 633, __pyx_L1_error)
__pyx_t_2 = PyInt_FromSsize_t(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 633, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_1 = PyNumber_Subtract(__pyx_v_n_total_kw, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 633, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_v_n_kw_not_used); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 633, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_3 = __Pyx_PyInt_From_long(__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 633, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_4 = PyObject_RichCompare(__pyx_t_3, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 633, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 633, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
if (__pyx_t_7) {
__pyx_t_4 = __Pyx_PyInt_From_long(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 633, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__pyx_t_1 = __pyx_t_4;
__pyx_t_4 = 0;
} else {
__Pyx_INCREF(__pyx_t_2);
__pyx_t_1 = __pyx_t_2;
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_t_2 = __pyx_t_1;
__Pyx_INCREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_v_n_not_mapped_all = __pyx_t_2;
__pyx_t_2 = 0;
+634: r.trace += [
__pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 634, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_r->trace, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 634, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_GIVEREF(__pyx_t_2); __Pyx_GOTREF(__pyx_v_r->trace); __Pyx_DECREF(__pyx_v_r->trace); __pyx_v_r->trace = ((PyObject*)__pyx_t_2); __pyx_t_2 = 0;
+635: str(locals()),
__pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (((PyObject *)__pyx_v_c)) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_c, ((PyObject *)__pyx_v_c)) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } __pyx_t_1 = PyFloat_FromDouble(__pyx_v_dscore); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__pyx_t_1) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_dscore, __pyx_t_1) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_v_keywords_list) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_keywords_list, __pyx_v_keywords_list) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } if (__pyx_v_keywords_used) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_keywords_used, __pyx_v_keywords_used) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } if (__pyx_v_keywords_used_no_stopw) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_keywords_used_no_stopw, __pyx_v_keywords_used_no_stopw) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } if (__pyx_v_n_kw_not_used) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_n_kw_not_used, __pyx_v_n_kw_not_used) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } if (__pyx_v_n_kw_without_stopw) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_n_kw_without_stopw, __pyx_v_n_kw_without_stopw) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } if (__pyx_v_n_not_mapped_all) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_n_not_mapped_all, __pyx_v_n_not_mapped_all) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } if (__pyx_v_n_total_kw) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_n_total_kw, __pyx_v_n_total_kw) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } if (((PyObject *)__pyx_v_r)) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_r, ((PyObject *)__pyx_v_r)) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_r_type_specified); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); if (__pyx_t_1) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_r_type_specified, __pyx_t_1) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__pyx_v_result_type) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_result_type, __pyx_v_result_type) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } if (__pyx_v_score) { if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_score, __pyx_v_score) < 0) __PYX_ERR(0, 635, __pyx_L1_error) } __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 635, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
636: ]
+637: score += logprob(P_NOT_TAKEN_STOPWORD) * n_not_mapped_all
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_P_NOT_TAKEN_STOPWORD); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_2); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 637, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyFloat_FromDouble(__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_logprob(__pyx_t_8)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Multiply(__pyx_t_2, __pyx_v_n_not_mapped_all); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_score, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 637, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF_SET(__pyx_v_score, __pyx_t_2); __pyx_t_2 = 0;
638:
639:
+640: cdef bint r_type_specified = r.result_type and not r.result_type_enumerated
__pyx_t_9 = __Pyx_PyObject_IsTrue(__pyx_v_r->result_type); if (unlikely(__pyx_t_9 < 0)) __PYX_ERR(0, 640, __pyx_L1_error)
if (__pyx_t_9) {
} else {
__pyx_t_7 = __pyx_t_9;
goto __pyx_L3_bool_binop_done;
}
__pyx_t_9 = ((!(__pyx_v_r->result_type_enumerated != 0)) != 0);
__pyx_t_7 = __pyx_t_9;
__pyx_L3_bool_binop_done:;
__pyx_v_r_type_specified = __pyx_t_7;
+641: if r_type_specified:
__pyx_t_7 = (__pyx_v_r_type_specified != 0);
if (__pyx_t_7) {
goto __pyx_L5;
}
642: pass
+643: elif r.greps:
__pyx_t_7 = (__pyx_v_r->greps != Py_None) && (PyList_GET_SIZE(__pyx_v_r->greps) != 0);
if (__pyx_t_7) {
/* … */
goto __pyx_L5;
}
644: # grep (filter) is also sort of defining the result type, but not allways...
645: # this has already +/- accounted for result_type (probability was multiplied)
646: # we could add a high probability, so slightly favour explicit result types
+647: score += logprob(0.8)
__pyx_t_2 = PyFloat_FromDouble(__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_logprob(0.8)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_InPlaceAdd(__pyx_v_score, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 647, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __Pyx_DECREF_SET(__pyx_v_score, __pyx_t_1); __pyx_t_1 = 0;
648: else:
+649: score += logprob(P_NOT_SPECIFIED_RES_TYPE)
/*else*/ {
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_P_NOT_SPECIFIED_RES_TYPE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 649, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 649, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_t_1 = PyFloat_FromDouble(__pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_logprob(__pyx_t_8)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 649, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyNumber_InPlaceAdd(__pyx_v_score, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 649, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__Pyx_DECREF_SET(__pyx_v_score, __pyx_t_2);
__pyx_t_2 = 0;
}
__pyx_L5:;
650:
+651: return score
__pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_v_score); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 651, __pyx_L1_error) __pyx_r = __pyx_t_8; goto __pyx_L0;
652:
653:
+654: def normalization_factor_by_query_len(keywords_list):
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_11normalization_factor_by_query_len(PyObject *__pyx_self, PyObject *__pyx_v_keywords_list); /*proto*/
static char __pyx_doc_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_10normalization_factor_by_query_len[] = "\n provides query score normalization factor (expected very good score)\n based on query length (excluding stopwords).\n keywords with operators get double score (as they are scored twice in the ranking)\n\n TODO: multi word phrases get multiplied score as well\n\n + 0.3 extra for entity_type and other boost features\n ";
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_11normalization_factor_by_query_len = {"normalization_factor_by_query_len", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_11normalization_factor_by_query_len, METH_O, __pyx_doc_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_10normalization_factor_by_query_len};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_11normalization_factor_by_query_len(PyObject *__pyx_self, PyObject *__pyx_v_keywords_list) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("normalization_factor_by_query_len (wrapper)", 0);
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_10normalization_factor_by_query_len(__pyx_self, ((PyObject *)__pyx_v_keywords_list));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_10normalization_factor_by_query_len(CYTHON_UNUSED PyObject *__pyx_self, CYTHON_UNUSED PyObject *__pyx_v_keywords_list) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("normalization_factor_by_query_len", 0);
/* … */
/* function exit code */
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__19 = PyTuple_Pack(1, __pyx_n_s_keywords_list); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(0, 654, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__19);
__Pyx_GIVEREF(__pyx_tuple__19);
/* … */
__pyx_t_2 = PyCFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_11normalization_factor_by_query_len, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 654, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_normalization_factor_by_query_le, __pyx_t_2) < 0) __PYX_ERR(0, 654, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_codeobj__20 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__19, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_vk_CMS_DMWM_GIT_DAS_src_p, __pyx_n_s_normalization_factor_by_query_le, 654, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__20)) __PYX_ERR(0, 654, __pyx_L1_error)
655: """
656: provides query score normalization factor (expected very good score)
657: based on query length (excluding stopwords).
658: keywords with operators get double score (as they are scored twice in the ranking)
659:
660: TODO: multi word phrases get multiplied score as well
661:
662: + 0.3 extra for entity_type and other boost features
663: """
+664: return 1.0 # probabilistic ranking only
__Pyx_XDECREF(__pyx_r); __Pyx_INCREF(__pyx_float_1_0); __pyx_r = __pyx_float_1_0; goto __pyx_L0;
665:
666:
667: # TODO: this has to be implemented in a better way
668: # TODO: shall this go into entity_matcher directly?
669: cdef bint _penalize_highly_possible_schema_terms_as_values_enabled = \
+670: get_setting('DOWNRANK_TERMS_REFERRING_TO_SCHEMA')
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_setting); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 670, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 670, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 670, __pyx_L1_error) __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__penalize_highly_possible_schema_terms_as_values_enabled = __pyx_t_3; /* … */ __pyx_tuple__21 = PyTuple_Pack(1, __pyx_n_s_iso88591_DOWNRANK_TERMS_REFERRING_TO_SCHE); if (unlikely(!__pyx_tuple__21)) __PYX_ERR(0, 670, __pyx_L1_error) __Pyx_GOTREF(__pyx_tuple__21); __Pyx_GIVEREF(__pyx_tuple__21);
671:
672:
+673: def _penalise_subroutine_schematerms(keyword, schema_ws):
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_13_penalise_subroutine_schematerms(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_13_penalise_subroutine_schematerms = {"_penalise_subroutine_schematerms", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_13_penalise_subroutine_schematerms, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_13_penalise_subroutine_schematerms(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_keyword = 0;
PyObject *__pyx_v_schema_ws = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_penalise_subroutine_schematerms (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_keyword,&__pyx_n_s_schema_ws,0};
PyObject* values[2] = {0,0};
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
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_keyword)) != 0)) kw_args--;
else goto __pyx_L5_argtuple_error;
case 1:
if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_schema_ws)) != 0)) kw_args--;
else {
__Pyx_RaiseArgtupleInvalid("_penalise_subroutine_schematerms", 1, 2, 2, 1); __PYX_ERR(0, 673, __pyx_L3_error)
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_penalise_subroutine_schematerms") < 0)) __PYX_ERR(0, 673, __pyx_L3_error)
}
} else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
goto __pyx_L5_argtuple_error;
} else {
values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
}
__pyx_v_keyword = values[0];
__pyx_v_schema_ws = values[1];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_penalise_subroutine_schematerms", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 673, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker._penalise_subroutine_schematerms", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_12_penalise_subroutine_schematerms(__pyx_self, __pyx_v_keyword, __pyx_v_schema_ws);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_12_penalise_subroutine_schematerms(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_keyword, PyObject *__pyx_v_schema_ws) {
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms *__pyx_cur_scope;
long __pyx_v__DEBUG;
PyObject *__pyx_v_f_avg_score = NULL;
PyObject *__pyx_v_avg_score = NULL;
PyObject *__pyx_v_keyword_schema_score = NULL;
PyObject *__pyx_v_keyword_scores = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_penalise_subroutine_schematerms", 0);
__pyx_cur_scope = (struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms *)__pyx_tp_new_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms(__pyx_ptype_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms, __pyx_empty_tuple, NULL);
if (unlikely(!__pyx_cur_scope)) {
__Pyx_RefNannyFinishContext();
return NULL;
}
__Pyx_GOTREF(__pyx_cur_scope);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker._penalise_subroutine_schematerms", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_f_avg_score);
__Pyx_XDECREF(__pyx_v_avg_score);
__Pyx_XDECREF(__pyx_v_keyword_schema_score);
__Pyx_XDECREF(__pyx_v_keyword_scores);
__Pyx_DECREF(((PyObject *)__pyx_cur_scope));
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__22 = PyTuple_Pack(9, __pyx_n_s_keyword, __pyx_n_s_schema_ws, __pyx_n_s_DEBUG_2, __pyx_n_s_f_avg, __pyx_n_s_f_avg_2, __pyx_n_s_f_avg_score, __pyx_n_s_avg_score, __pyx_n_s_keyword_schema_score, __pyx_n_s_keyword_scores); if (unlikely(!__pyx_tuple__22)) __PYX_ERR(0, 673, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__22);
__Pyx_GIVEREF(__pyx_tuple__22);
/* … */
__pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_13_penalise_subroutine_schematerms, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 673, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_penalise_subroutine_schematerms_3, __pyx_t_1) < 0) __PYX_ERR(0, 673, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_codeobj__23 = (PyObject*)__Pyx_PyCode_New(2, 0, 9, 0, 0, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__22, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_Users_vk_CMS_DMWM_GIT_DAS_src_p, __pyx_n_s_penalise_subroutine_schematerms_3, 673, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__23)) __PYX_ERR(0, 673, __pyx_L1_error)
/* … */
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms {
PyObject_HEAD
PyObject *__pyx_v_f_avg;
PyObject *__pyx_v_f_avg_;
};
+674: _DEBUG = 0
/* "DAS/keywordsearch/rankers/fast_recursive_ranker.pyx":674 * * def _penalise_subroutine_schematerms(keyword, schema_ws): * _DEBUG = 0 # <<<<<<<<<<<<<< * * # e.g. configuration of dataset Zmmg-13Jul2012-v1 site=T1_* location is at T1_* */ __pyx_v__DEBUG = 0;
675:
676: # e.g. configuration of dataset Zmmg-13Jul2012-v1 site=T1_* location is at T1_*
677: # 4.37: dataset dataset=*Zmmg-13Jul2012-v1* site=T1_*
678: # 4.37: dataset dataset=*dataset* site=T1_*
679: # I should look at distribution and compare with other keywords
+680: f_avg_ = lambda items: len(items) and sum(items) / len(items) or None
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_lambda(PyObject *__pyx_self, PyObject *__pyx_v_items); /*proto*/
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_lambda = {"lambda", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_lambda, METH_O, 0};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_lambda(PyObject *__pyx_self, PyObject *__pyx_v_items) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_lambda(__pyx_self, ((PyObject *)__pyx_v_items));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_lambda_funcdef_lambda(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_items) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda", 0);
__Pyx_XDECREF(__pyx_r);
__pyx_t_2 = PyObject_Length(__pyx_v_items); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 680, __pyx_L1_error)
if (!__pyx_t_2) {
goto __pyx_L4_next_or;
} else {
}
__pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 680, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_INCREF(__pyx_v_items);
__Pyx_GIVEREF(__pyx_v_items);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_items);
__pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_sum, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 680, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_2 = PyObject_Length(__pyx_v_items); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 680, __pyx_L1_error)
__pyx_t_3 = PyInt_FromSsize_t(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 680, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 680, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_5);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 680, __pyx_L1_error)
if (!__pyx_t_6) {
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
} else {
__Pyx_INCREF(__pyx_t_5);
__pyx_t_1 = __pyx_t_5;
__Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
goto __pyx_L3_bool_binop_done;
}
__pyx_L4_next_or:;
__Pyx_INCREF(Py_None);
__pyx_t_1 = Py_None;
__pyx_L3_bool_binop_done:;
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_4);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker._penalise_subroutine_schematerms.lambda", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_lambda, 0, __pyx_n_s_penalise_subroutine_schematerms_2, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r, __pyx_d, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 680, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__pyx_cur_scope->__pyx_v_f_avg_ = __pyx_t_1;
__pyx_t_1 = 0;
+681: f_avg = lambda items: f_avg_(filter(None, items))
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_1lambda1(PyObject *__pyx_self, PyObject *__pyx_v_items); /*proto*/
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_1lambda1 = {"lambda1", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_1lambda1, METH_O, 0};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_1lambda1(PyObject *__pyx_self, PyObject *__pyx_v_items) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda1 (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_lambda1(__pyx_self, ((PyObject *)__pyx_v_items));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_lambda_funcdef_lambda1(PyObject *__pyx_self, PyObject *__pyx_v_items) {
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms *__pyx_cur_scope;
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms *__pyx_outer_scope;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda1", 0);
__pyx_outer_scope = (struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 681, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_INCREF(Py_None);
__Pyx_GIVEREF(Py_None);
PyTuple_SET_ITEM(__pyx_t_1, 0, Py_None);
__Pyx_INCREF(__pyx_v_items);
__Pyx_GIVEREF(__pyx_v_items);
PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_items);
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_filter, __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 681, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
if (unlikely(!__pyx_cur_scope->__pyx_v_f_avg_)) { __Pyx_RaiseClosureNameError("f_avg_"); __PYX_ERR(0, 681, __pyx_L1_error) }
__pyx_t_1 = __pyx_lambda_funcdef_lambda(__pyx_cur_scope->__pyx_v_f_avg_, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 681, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker._penalise_subroutine_schematerms.lambda1", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_1lambda1, 0, __pyx_n_s_penalise_subroutine_schematerms_2, ((PyObject*)__pyx_cur_scope), __pyx_n_s_DAS_keywordsearch_rankers_fast_r, __pyx_d, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 681, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_GIVEREF(__pyx_t_1);
__pyx_cur_scope->__pyx_v_f_avg = __pyx_t_1;
__pyx_t_1 = 0;
+682: f_avg_score = lambda interpretations: f_avg(
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_2lambda2(PyObject *__pyx_self, PyObject *__pyx_v_interpretations); /*proto*/
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_2lambda2 = {"lambda2", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_2lambda2, METH_O, 0};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_2lambda2(PyObject *__pyx_self, PyObject *__pyx_v_interpretations) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda2 (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_lambda2(__pyx_self, ((PyObject *)__pyx_v_interpretations));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
static PyObject *__pyx_lambda_funcdef_lambda2(PyObject *__pyx_self, PyObject *__pyx_v_interpretations) {
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms *__pyx_cur_scope;
struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms *__pyx_outer_scope;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda2", 0);
__pyx_outer_scope = (struct __pyx_obj_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker___pyx_scope_struct___penalise_subroutine_schematerms *) __Pyx_CyFunction_GetClosure(__pyx_self);
__pyx_cur_scope = __pyx_outer_scope;
__Pyx_XDECREF(__pyx_r);
/* … */
if (unlikely(!__pyx_cur_scope->__pyx_v_f_avg)) { __Pyx_RaiseClosureNameError("f_avg"); __PYX_ERR(0, 682, __pyx_L1_error) }
__pyx_t_2 = __pyx_lambda_funcdef_lambda1(__pyx_cur_scope->__pyx_v_f_avg, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 682, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
__pyx_r = __pyx_t_2;
__pyx_t_2 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker._penalise_subroutine_schematerms.lambda2", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_2lambda2, 0, __pyx_n_s_penalise_subroutine_schematerms_2, ((PyObject*)__pyx_cur_scope), __pyx_n_s_DAS_keywordsearch_rankers_fast_r, __pyx_d, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 682, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_v_f_avg_score = __pyx_t_1;
__pyx_t_1 = 0;
+683: map(lambda item: item[0], interpretations))
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_7lambda2_lambda3(PyObject *__pyx_self, PyObject *__pyx_v_item); /*proto*/
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_7lambda2_lambda3 = {"lambda3", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_7lambda2_lambda3, METH_O, 0};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_7lambda2_lambda3(PyObject *__pyx_self, PyObject *__pyx_v_item) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda3 (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_lambda3(__pyx_self, ((PyObject *)__pyx_v_item));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_lambda_funcdef_lambda3(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_item) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda3", 0);
__Pyx_XDECREF(__pyx_r);
__pyx_t_1 = __Pyx_GetItemInt(__pyx_v_item, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker._penalise_subroutine_schematerms.lambda2.lambda3", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_1 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_32_penalise_subroutine_schematerms_7lambda2_lambda3, 0, __pyx_n_s_penalise_subroutine_schematerms, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r, __pyx_d, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 683, __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_interpretations);
__Pyx_GIVEREF(__pyx_v_interpretations);
PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_interpretations);
__pyx_t_1 = 0;
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_2, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 683, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
684: # global average schema score
+685: avg_score = f_avg([f_avg_score(keyword_scores)
__pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); /* … */ __pyx_t_3 = __pyx_lambda_funcdef_lambda2(__pyx_v_f_avg_score, __pyx_v_keyword_scores); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_3))) __PYX_ERR(0, 685, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; /* … */ __pyx_t_4 = __pyx_lambda_funcdef_lambda1(__pyx_cur_scope->__pyx_v_f_avg, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 685, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 685, __pyx_L1_error) if (!__pyx_t_8) { __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; } else { __Pyx_INCREF(__pyx_t_4); __pyx_t_1 = __pyx_t_4; __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; goto __pyx_L3_bool_binop_done; }
+686: for keyword_scores in schema_ws.values()]) or 0.0
__pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_schema_ws, __pyx_n_s_values); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_5 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && 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, 686, __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, 686, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; if (likely(PyList_CheckExact(__pyx_t_3)) || PyTuple_CheckExact(__pyx_t_3)) { __pyx_t_4 = __pyx_t_3; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0; __pyx_t_7 = NULL; } else { __pyx_t_6 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_7 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 686, __pyx_L1_error) } __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; for (;;) { if (likely(!__pyx_t_7)) { if (likely(PyList_CheckExact(__pyx_t_4))) { if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 686, __pyx_L1_error) #else __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif } else { if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_4)) break; #if CYTHON_COMPILING_IN_CPYTHON __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_3); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 686, __pyx_L1_error) #else __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); #endif } } else { __pyx_t_3 = __pyx_t_7(__pyx_t_4); if (unlikely(!__pyx_t_3)) { PyObject* exc_type = PyErr_Occurred(); if (exc_type) { if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear(); else __PYX_ERR(0, 686, __pyx_L1_error) } break; } __Pyx_GOTREF(__pyx_t_3); } __Pyx_XDECREF_SET(__pyx_v_keyword_scores, __pyx_t_3); __pyx_t_3 = 0; /* … */ } __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; /* … */ __pyx_t_4 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 686, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_1 = __pyx_t_4; __pyx_t_4 = 0; __pyx_L3_bool_binop_done:; __pyx_v_avg_score = __pyx_t_1; __pyx_t_1 = 0;
687: # average score for this keyword
+688: keyword_schema_score = f_avg_score(schema_ws[keyword]) or 0.0
__pyx_t_4 = PyObject_GetItem(__pyx_v_schema_ws, __pyx_v_keyword); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = __pyx_lambda_funcdef_lambda2(__pyx_v_f_avg_score, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 688, __pyx_L1_error) if (!__pyx_t_8) { __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { __Pyx_INCREF(__pyx_t_2); __pyx_t_1 = __pyx_t_2; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; goto __pyx_L7_bool_binop_done; } __pyx_t_2 = PyFloat_FromDouble(0.0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 688, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = __pyx_t_2; __pyx_t_2 = 0; __pyx_L7_bool_binop_done:; __pyx_v_keyword_schema_score = __pyx_t_1; __pyx_t_1 = 0;
+689: if _DEBUG:
__pyx_t_8 = (__pyx_v__DEBUG != 0);
if (__pyx_t_8) {
/* … */
}
+690: print "avg schema score for '%s' is %.2f; avg schema = %.2f " % (
__pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_iso88591_avg_schema_score_for_s_is_2f_avg, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 690, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; if (__Pyx_PrintOne(0, __pyx_t_2) < 0) __PYX_ERR(0, 690, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+691: keyword, keyword_schema_score, avg_score)
__pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 691, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_v_keyword); __Pyx_GIVEREF(__pyx_v_keyword); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_keyword); __Pyx_INCREF(__pyx_v_keyword_schema_score); __Pyx_GIVEREF(__pyx_v_keyword_schema_score); PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_keyword_schema_score); __Pyx_INCREF(__pyx_v_avg_score); __Pyx_GIVEREF(__pyx_v_avg_score); PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_avg_score);
+692: if avg_score < keyword_schema_score:
__pyx_t_2 = PyObject_RichCompare(__pyx_v_avg_score, __pyx_v_keyword_schema_score, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 692, __pyx_L1_error) __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 692, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (__pyx_t_8) { /* … */ }
+693: return 3 * min(-0.5, -(keyword_schema_score - avg_score))
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = PyNumber_Subtract(__pyx_v_keyword_schema_score, __pyx_v_avg_score); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_1 = PyNumber_Negative(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_9 = -0.5; __pyx_t_4 = PyFloat_FromDouble(__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error) __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(0, 693, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_8) { __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = __pyx_t_1; } else { __pyx_t_3 = PyFloat_FromDouble(__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __pyx_t_3; __pyx_t_3 = 0; } __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __pyx_t_1 = PyNumber_Multiply(__pyx_int_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 693, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_r = __pyx_t_1; __pyx_t_1 = 0; goto __pyx_L0;
694: else:
+695: return 0.0
/*else*/ {
__Pyx_XDECREF(__pyx_r);
__Pyx_INCREF(__pyx_float_0_0);
__pyx_r = __pyx_float_0_0;
goto __pyx_L0;
}
696:
697:
698:
699:
+700: def _get_reserved_terms(stem=False):
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_15_get_reserved_terms(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_14_get_reserved_terms[] = "\n terms that shall be down-ranked if contained in values or in grep-field names\n ";
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_15_get_reserved_terms = {"_get_reserved_terms", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_15_get_reserved_terms, METH_VARARGS|METH_KEYWORDS, __pyx_doc_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_14_get_reserved_terms};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_15_get_reserved_terms(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
PyObject *__pyx_v_stem = 0;
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_get_reserved_terms (wrapper)", 0);
{
static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_stem,0};
PyObject* values[1] = {0};
values[0] = ((PyObject *)Py_False);
if (unlikely(__pyx_kwds)) {
Py_ssize_t kw_args;
const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
switch (pos_args) {
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
kw_args = PyDict_Size(__pyx_kwds);
switch (pos_args) {
case 0:
if (kw_args > 0) {
PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stem);
if (value) { values[0] = value; kw_args--; }
}
}
if (unlikely(kw_args > 0)) {
if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_get_reserved_terms") < 0)) __PYX_ERR(0, 700, __pyx_L3_error)
}
} else {
switch (PyTuple_GET_SIZE(__pyx_args)) {
case 1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
case 0: break;
default: goto __pyx_L5_argtuple_error;
}
}
__pyx_v_stem = values[0];
}
goto __pyx_L4_argument_unpacking_done;
__pyx_L5_argtuple_error:;
__Pyx_RaiseArgtupleInvalid("_get_reserved_terms", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 700, __pyx_L3_error)
__pyx_L3_error:;
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker._get_reserved_terms", __pyx_clineno, __pyx_lineno, __pyx_filename);
__Pyx_RefNannyFinishContext();
return NULL;
__pyx_L4_argument_unpacking_done:;
__pyx_r = __pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_14_get_reserved_terms(__pyx_self, __pyx_v_stem);
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
static PyObject *__pyx_pf_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_14_get_reserved_terms(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_stem) {
PyObject *__pyx_v_entities = NULL;
PyObject *__pyx_v_operators = NULL;
PyObject *__pyx_v_r = NULL;
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("_get_reserved_terms", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_1);
__Pyx_XDECREF(__pyx_t_2);
__Pyx_XDECREF(__pyx_t_3);
__Pyx_AddTraceback("DAS.keywordsearch.rankers.fast_recursive_ranker._get_reserved_terms", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XDECREF(__pyx_v_entities);
__Pyx_XDECREF(__pyx_v_operators);
__Pyx_XDECREF(__pyx_v_r);
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_tuple__24 = PyTuple_Pack(4, __pyx_n_s_stem, __pyx_n_s_entities, __pyx_n_s_operators, __pyx_n_s_r); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(0, 700, __pyx_L1_error)
__Pyx_GOTREF(__pyx_tuple__24);
__Pyx_GIVEREF(__pyx_tuple__24);
/* … */
__pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_15_get_reserved_terms, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 700, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
if (PyDict_SetItem(__pyx_d, __pyx_n_s_get_reserved_terms, __pyx_t_1) < 0) __PYX_ERR(0, 700, __pyx_L1_error)
__Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
701: """
702: terms that shall be down-ranked if contained in values or in grep-field names
703: """
704: # TODO: list of entities shall be taken from das_schema_adapter
+705: entities = ['dataset', 'run', 'block', 'file', 'site', 'config', 'time',
__pyx_t_1 = PyList_New(8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_INCREF(__pyx_n_s_iso88591_dataset); __Pyx_GIVEREF(__pyx_n_s_iso88591_dataset); PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_iso88591_dataset); __Pyx_INCREF(__pyx_n_s_iso88591_run); __Pyx_GIVEREF(__pyx_n_s_iso88591_run); PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_iso88591_run); __Pyx_INCREF(__pyx_n_s_iso88591_block); __Pyx_GIVEREF(__pyx_n_s_iso88591_block); PyList_SET_ITEM(__pyx_t_1, 2, __pyx_n_s_iso88591_block); __Pyx_INCREF(__pyx_n_s_iso88591_file); __Pyx_GIVEREF(__pyx_n_s_iso88591_file); PyList_SET_ITEM(__pyx_t_1, 3, __pyx_n_s_iso88591_file); __Pyx_INCREF(__pyx_n_s_iso88591_site); __Pyx_GIVEREF(__pyx_n_s_iso88591_site); PyList_SET_ITEM(__pyx_t_1, 4, __pyx_n_s_iso88591_site); __Pyx_INCREF(__pyx_n_s_iso88591_config); __Pyx_GIVEREF(__pyx_n_s_iso88591_config); PyList_SET_ITEM(__pyx_t_1, 5, __pyx_n_s_iso88591_config); __Pyx_INCREF(__pyx_n_s_iso88591_time); __Pyx_GIVEREF(__pyx_n_s_iso88591_time); PyList_SET_ITEM(__pyx_t_1, 6, __pyx_n_s_iso88591_time); __Pyx_INCREF(__pyx_n_s_iso88591_lumi); __Pyx_GIVEREF(__pyx_n_s_iso88591_lumi); PyList_SET_ITEM(__pyx_t_1, 7, __pyx_n_s_iso88591_lumi); __pyx_v_entities = ((PyObject*)__pyx_t_1); __pyx_t_1 = 0;
706: 'lumi']
+707: operators = das_ql.get_operator_synonyms()
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_das_ql); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_operator_synonyms); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 707, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; __pyx_t_2 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && 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); } } if (__pyx_t_2) { __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error) __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; } else { __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __pyx_L1_error) } __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_operators = __pyx_t_1; __pyx_t_1 = 0;
+708: r = set(entities) | set(operators)
__pyx_t_1 = PySet_New(__pyx_v_entities); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_3 = PySet_New(__pyx_v_operators); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = PyNumber_Or(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 708, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_v_r = __pyx_t_2; __pyx_t_2 = 0;
709:
+710: if stem:
__pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_stem); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 710, __pyx_L1_error)
if (__pyx_t_4) {
/* … */
}
+711: r = map(lambda w: getstem(w), r)
/* Python wrapper */
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19_get_reserved_terms_lambda4(PyObject *__pyx_self, PyObject *__pyx_v_w); /*proto*/
static PyMethodDef __pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19_get_reserved_terms_lambda4 = {"lambda4", (PyCFunction)__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19_get_reserved_terms_lambda4, METH_O, 0};
static PyObject *__pyx_pw_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19_get_reserved_terms_lambda4(PyObject *__pyx_self, PyObject *__pyx_v_w) {
PyObject *__pyx_r = 0;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda4 (wrapper)", 0);
__pyx_r = __pyx_lambda_funcdef_lambda4(__pyx_self, ((PyObject *)__pyx_v_w));
/* function exit code */
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
static PyObject *__pyx_lambda_funcdef_lambda4(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v_w) {
PyObject *__pyx_r = NULL;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("lambda4", 0);
__Pyx_XDECREF(__pyx_r);
__pyx_t_2 = __Pyx_GetModuleGlobalName(__pyx_n_s_getstem); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = NULL;
if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_2))) {
__pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
if (likely(__pyx_t_3)) {
PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
__Pyx_INCREF(__pyx_t_3);
__Pyx_INCREF(function);
__Pyx_DECREF_SET(__pyx_t_2, function);
}
}
if (!__pyx_t_3) {
__pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_w); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
} else {
__pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_4);
__Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
__Pyx_INCREF(__pyx_v_w);
__Pyx_GIVEREF(__pyx_v_w);
PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_w);
__pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_1);
__Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
}
__Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
__pyx_r = __pyx_t_1;
__pyx_t_1 = 0;
goto __pyx_L0;
/* 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("DAS.keywordsearch.rankers.fast_recursive_ranker._get_reserved_terms.lambda4", __pyx_clineno, __pyx_lineno, __pyx_filename);
__pyx_r = NULL;
__pyx_L0:;
__Pyx_XGIVEREF(__pyx_r);
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
/* … */
__pyx_t_2 = __Pyx_CyFunction_NewEx(&__pyx_mdef_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_19_get_reserved_terms_lambda4, 0, __pyx_n_s_get_reserved_terms_locals_lambd, NULL, __pyx_n_s_DAS_keywordsearch_rankers_fast_r, __pyx_d, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_3);
__Pyx_GIVEREF(__pyx_t_2);
PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
__Pyx_INCREF(__pyx_v_r);
__Pyx_GIVEREF(__pyx_v_r);
PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_r);
__pyx_t_2 = 0;
__pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_map, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 711, __pyx_L1_error)
__Pyx_GOTREF(__pyx_t_2);
__Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
__Pyx_DECREF_SET(__pyx_v_r, __pyx_t_2);
__pyx_t_2 = 0;
+712: return set(r)
__Pyx_XDECREF(__pyx_r); __pyx_t_2 = PySet_New(__pyx_v_r); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 712, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); __pyx_r = __pyx_t_2; __pyx_t_2 = 0; goto __pyx_L0;
713:
+714: cdef set _reserved_terms = _get_reserved_terms(stem=False)
__pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_reserved_terms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stem, Py_False) < 0) __PYX_ERR(0, 714, __pyx_L1_error) __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 714, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(PySet_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 714, __pyx_L1_error) __Pyx_XGOTREF(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms); __Pyx_DECREF_SET(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms, ((PyObject*)__pyx_t_4)); __Pyx_GIVEREF(__pyx_t_4); __pyx_t_4 = 0;
+715: cdef set _reserved_terms_stemed = _get_reserved_terms(stem=True)
__pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_get_reserved_terms); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_4); __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_2); if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stem, Py_True) < 0) __PYX_ERR(0, 715, __pyx_L1_error) __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_empty_tuple, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 715, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_1); __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0; __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0; if (!(likely(PySet_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "set", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(0, 715, __pyx_L1_error) __Pyx_XGOTREF(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms_stemed); __Pyx_DECREF_SET(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms_stemed, ((PyObject*)__pyx_t_1)); __Pyx_GIVEREF(__pyx_t_1); __pyx_t_1 = 0;
716:
717:
+718: cdef double penalize_highly_possible_schema_terms_as_values(keyword, schema_ws):
static double __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_penalize_highly_possible_schema_terms_as_values(PyObject *__pyx_v_keyword, PyObject *__pyx_v_schema_ws) {
double __pyx_r;
__Pyx_RefNannyDeclarations
__Pyx_RefNannySetupContext("penalize_highly_possible_schema_terms_as_values", 0);
/* … */
/* function exit code */
__pyx_L1_error:;
__Pyx_XDECREF(__pyx_t_3);
__Pyx_XDECREF(__pyx_t_5);
__Pyx_XDECREF(__pyx_t_6);
__Pyx_XDECREF(__pyx_t_7);
__Pyx_WriteUnraisable("DAS.keywordsearch.rankers.fast_recursive_ranker.penalize_highly_possible_schema_terms_as_values", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
__pyx_r = 0;
__pyx_L0:;
__Pyx_RefNannyFinishContext();
return __pyx_r;
}
719: """
720: it is important to avoid missclassifying dataset, run as values.
721: these shall be allowed only if explicitly requested.
722: """
723:
+724: if not _penalize_highly_possible_schema_terms_as_values_enabled:
__pyx_t_1 = ((!(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__penalize_highly_possible_schema_terms_as_values_enabled != 0)) != 0);
if (__pyx_t_1) {
/* … */
}
+725: return 0.0
__pyx_r = 0.0;
goto __pyx_L0;
726:
727: # TODO: this is just a quick workaround
+728: if keyword in _reserved_terms: #['dataset', 'run', 'block', 'file', 'site']:
__pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_v_keyword, __pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 728, __pyx_L1_error)
__pyx_t_2 = (__pyx_t_1 != 0);
if (__pyx_t_2) {
/* … */
}
729: # TODO: each reserved term shall have a different weight, e.g. operators lower than entity?
+730: return logprob(-5.0)
__pyx_r = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_logprob(-5.0);
goto __pyx_L0;
731:
+732: if DEBUG: print '_get_reserved_terms(stem=True):', _reserved_terms_stemed
__pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DEBUG); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; if (__pyx_t_2) { __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_INCREF(__pyx_kp_s_iso88591_get_reserved_terms_stem_True); __Pyx_GIVEREF(__pyx_kp_s_iso88591_get_reserved_terms_stem_True); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_s_iso88591_get_reserved_terms_stem_True); __Pyx_INCREF(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms_stemed); __Pyx_GIVEREF(__pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms_stemed); PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms_stemed); if (__Pyx_Print(0, __pyx_t_3, 1) < 0) __PYX_ERR(0, 732, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; }
733:
+734: if not ' ' in keyword and getstem(keyword) in _reserved_terms_stemed: #['dataset', 'run', 'block', 'file', 'site']:
__pyx_t_1 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_iso88591__10, __pyx_v_keyword, Py_NE)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 734, __pyx_L1_error) __pyx_t_4 = (__pyx_t_1 != 0); if (__pyx_t_4) { } else { __pyx_t_2 = __pyx_t_4; goto __pyx_L7_bool_binop_done; } __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_getstem); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_6 = NULL; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) { __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5); if (likely(__pyx_t_6)) { PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5); __Pyx_INCREF(__pyx_t_6); __Pyx_INCREF(function); __Pyx_DECREF_SET(__pyx_t_5, function); } } if (!__pyx_t_6) { __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_keyword); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); } else { __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_7); __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6); __pyx_t_6 = NULL; __Pyx_INCREF(__pyx_v_keyword); __Pyx_GIVEREF(__pyx_v_keyword); PyTuple_SET_ITEM(__pyx_t_7, 0+1, __pyx_v_keyword); __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0; } __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_4 = (__Pyx_PySequence_ContainsTF(__pyx_t_3, __pyx_v_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker__reserved_terms_stemed, Py_EQ)); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 734, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_t_1 = (__pyx_t_4 != 0); __pyx_t_2 = __pyx_t_1; __pyx_L7_bool_binop_done:; if (__pyx_t_2) { /* … */ }
735: # TODO: each reserved term shall have a different weight, e.g. operators lower than entity?
+736: return logprob(-3.0)
__pyx_r = __pyx_f_3DAS_13keywordsearch_7rankers_21fast_recursive_ranker_logprob(-3.0);
goto __pyx_L0;
737:
+738: if schema_ws:
__pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_schema_ws); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 738, __pyx_L1_error)
if (__pyx_t_2) {
/* … */
}
+739: return _penalise_subroutine_schematerms(keyword, schema_ws)
__pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_penalise_subroutine_schematerms_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_5); __pyx_t_7 = NULL; __pyx_t_8 = 0; if (CYTHON_COMPILING_IN_CPYTHON && unlikely(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); __pyx_t_8 = 1; } } __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_6); if (__pyx_t_7) { __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_7); __pyx_t_7 = NULL; } __Pyx_INCREF(__pyx_v_keyword); __Pyx_GIVEREF(__pyx_v_keyword); PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_keyword); __Pyx_INCREF(__pyx_v_schema_ws); __Pyx_GIVEREF(__pyx_v_schema_ws); PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_v_schema_ws); __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 739, __pyx_L1_error) __Pyx_GOTREF(__pyx_t_3); __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0; __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0; __pyx_t_9 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_9 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 739, __pyx_L1_error) __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0; __pyx_r = __pyx_t_9; goto __pyx_L0;
740:
+741: return 0.0
__pyx_r = 0.0; goto __pyx_L0;
742:
743: